oracle 多表多字段去重问题!
我要从两个表中查询多个字段,但是其中的某个字段重复的只显示一次!如何实现,如selecta.id,a.name,b.id,b.namefromAa,Bbwherea.id...
我要从两个表中查询多个字段,但是其中的某个字段重复的只显示一次!如何实现,
如select a.id ,a.name,b.id,b.name from A a ,B b where a.id = b.aid
试过distinct ,但是distinct是所有的字段重复才会去重,我只是当a.id相同时去重,如何实现! a.id 是18位字符串!
期待指点! 展开
如select a.id ,a.name,b.id,b.name from A a ,B b where a.id = b.aid
试过distinct ,但是distinct是所有的字段重复才会去重,我只是当a.id相同时去重,如何实现! a.id 是18位字符串!
期待指点! 展开
3个回答
展开全部
修正,你的b.id,应该是b.aid吧
下面这个当aid重复的时候,取a.name最小的,从而达到去掉重复。
SELECT id, name, aid, t.name
FROM (SELECT a.id, a.name, b.aid, b.name,
ROW_NUMBER() OVER(PARTITION BY a.id ORDER BY a.name) rk
FROM A a, B b WHERE a.id = b.aid) t
WHERE rk = 1
下面这个当aid重复的时候,取a.name最小的,从而达到去掉重复。
SELECT id, name, aid, t.name
FROM (SELECT a.id, a.name, b.aid, b.name,
ROW_NUMBER() OVER(PARTITION BY a.id ORDER BY a.name) rk
FROM A a, B b WHERE a.id = b.aid) t
WHERE rk = 1
展开全部
select * from
(
select a.id ,a.name,b.id bid,b.name bname,
row_number() over(partition by a.id order by rowid) r1
from A a ,B b
where a.id = b.aid
) t
where r1 = 1
(
select a.id ,a.name,b.id bid,b.name bname,
row_number() over(partition by a.id order by rowid) r1
from A a ,B b
where a.id = b.aid
) t
where r1 = 1
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
select
a.id ,
MAX(a.name),
b.id,
MAX(b.name)
from A a ,B b
where a.id = b.aid
GROUP BY a.id, b.id
a.id ,
MAX(a.name),
b.id,
MAX(b.name)
from A a ,B b
where a.id = b.aid
GROUP BY a.id, b.id
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询