关于ABC三张表关联的问题 现在出现了有些信息重复

张dozen 2013-09-17 03:08:50
A B C 三张表 A是主表 bc是两张从属表 现在做wmconcat group by A的主键的时候 会有重复
假如 b的从属信息只有一条,c的从属信息有2条 b的信息就会被重复多出一条。下面是测试的sql语句
create table testA (
ID varchar2(20)
);

create table testB (
AID varchar2(20),
bname varchar2(20)
);

create table testC (
AID varchar2(20),
cname varchar2(20)
);

insert into testA(ID) values('id1');

insert into testA(ID) values('id2');


insert into testB(AID,bname) values('id1','bname1');


insert into testC(AID,cname) values('id1','cname1');

insert into testC(AID,cname) values('id1','cname2');



SELECT a.ID,
WM_CONCAT(b.bname) bnames,
WM_CONCAT(c.cname) cnames
FROM testA a
LEFT OUTER JOIN testB b
ON b.aid = a.id

LEFT OUTER JOIN testC c
ON c.aid = a.id
GROUP BY a.id
查找的结果如下
1 id1 bname1,bname1 cname1,cname2
2 id2

bname1重复了两下
如何能让 bname1 只显示一条

...全文
168 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
张dozen 2013-09-17
  • 打赏
  • 举报
回复
引用 3 楼 HJ_daxian 的回复:
这样可以么..

select a.id,b.bname,c.cname 
from testa a 
     left join 
     (select aid,wm_concat(bname) bname from testb group by aid) b on a.id = b.aid
     left join 
     (select aid,wm_concat(cname) cname from testc group by aid) c on  a.id = c.aid



这个方式我试过了 ,很伤性能 要10s才出来结果
  • 打赏
  • 举报
回复
这样可以么..

select a.id,b.bname,c.cname 
from testa a 
     left join 
     (select aid,wm_concat(bname) bname from testb group by aid) b on a.id = b.aid
     left join 
     (select aid,wm_concat(cname) cname from testc group by aid) c on  a.id = c.aid



张dozen 2013-09-17
  • 打赏
  • 举报
回复
但是我上面的语句就显得很麻烦 有没有更方便 性能代价更小的方案
张dozen 2013-09-17
  • 打赏
  • 举报
回复
貌似 分两次select 就木有问题了 select d.id,max(d.bnames) ,WM_CONCAT(c.cname) cnames from ( SELECT a.ID, WM_CONCAT(b.bname) bnames FROM testA a LEFT OUTER JOIN testB b ON b.aid = a.id GROUP BY a.id ) d LEFT OUTER JOIN testC c ON c.aid = d.id GROUP BY d.id

17,090

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧