求一SQL

yjdfff 2009-06-14 02:45:12
有三张表(t1,t2,t3),结构一样.要得出T1.COL1=T2.COL1 T1.COL1=T3.COL1 然后以T2,T3表中行数多的显出来。没有对应为空 ,如:T1。COL=‘111’的在T2表中有两行,在T3表中有三行,则显示3行。。。
T1:
COL1 COL2
111 AAA
222 BBB
333 CCC

T2:
COL1 COL2
111 FSDF
111 FFE
222 FDFS
222 FDFD
222 DFSF
222 FSSSS

T3:
COL1 COL2
111 FEFEE
111 FDFE
111 DFEFE
222 FEFE

现在要得出的结果如下:
T1.COL1 T2.COL2 T3.COL2
111 FSDF FEFEE
111 FFE FDFE
111 DFEFE
222 FDFS FDDDFS
222 FDFD
222 DFSF
222 FSSSS
...全文
73 14 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
Run_LeoCat 2009-06-17
  • 打赏
  • 举报
回复
关注中
welyngj 2009-06-14
  • 打赏
  • 举报
回复
等待高手。。。
yjdfff 2009-06-14
  • 打赏
  • 举报
回复
不用程序,你还有办法没?
welyngj 2009-06-14
  • 打赏
  • 举报
回复
这个有点复杂。。因为他并不是单纯的连接。
yjdfff 2009-06-14
  • 打赏
  • 举报
回复
welyngj

还有其它方法没?
yjdfff 2009-06-14
  • 打赏
  • 举报
回复
高手些帮帮忙撒
yjdfff 2009-06-14
  • 打赏
  • 举报
回复
也就是以T2,T3表中最多的行数为准,条件是COL1相等
CTO1206 2009-06-14
  • 打赏
  • 举报
回复
确实不对哦!!!
yjdfff 2009-06-14
  • 打赏
  • 举报
回复
1 111 XXX DFE
2 111 XXXX DFE
3 111 XXX DFED
4 111 XXXX DFED
5 111 XXX EFS
6 111 XXXX EFS
7 222 DDD DFFED
8 222 DDD DFEF
9 222 DDD FSDFDF
10 444 EEE DDD
11 444 EEE DDDD


111应该只有三条
welyngj 2009-06-14
  • 打赏
  • 举报
回复
SELECT T21.COL1,T21.COL2,T31.COL2 FROM (SELECT T2.COL1,T2.COL2 FROM T1,T2 WHERE T1.COL1=T2.COL1) T21
LEFT OUTER JOIN (SELECT T3.COL1,T3.COL2 FROM T1,T3 WHERE T1.COL1=T3.COL1) T31 ON T21.COL1=T31.COL1
yjdfff 2009-06-14
  • 打赏
  • 举报
回复
你可以用一点数据测试一下


CREATE TABLE T1(COL1 VARCHAR2(10),COL2 VARCHAR2(10));
CREATE TABLE T2(COL1 VARCHAR2(10),COL2 VARCHAR2(10));
CREATE TABLE T3(COL1 VARCHAR2(10),COL2 VARCHAR2(10));
insert into T1 (COL1, COL2)
values ('111', 'ABC');
insert into T1 (COL1, COL2)
values ('222', 'BCD');
insert into T1 (COL1, COL2)
values ('333', 'DDD');
insert into T1 (COL1, COL2)
values ('444', 'EEF');
insert into T1 (COL1, COL2)
values ('555', 'SFE');
commit;
insert into T2 (COL1, COL2)
values ('111', 'XXXX');
insert into T2 (COL1, COL2)
values ('111', 'XXX');
insert into T2 (COL1, COL2)
values ('222', 'DDD');
insert into T2 (COL1, COL2)
values ('444', 'EEE');
commit;
insert into T3 (COL1, COL2)
values ('111', 'DFE');
insert into T3 (COL1, COL2)
values ('111', 'DFED');
insert into T3 (COL1, COL2)
values ('111', 'EFS');
insert into T3 (COL1, COL2)
values ('222', 'DFFED');
insert into T3 (COL1, COL2)
values ('222', 'DFEF');
insert into T3 (COL1, COL2)
values ('222', 'FSDFDF');
insert into T3 (COL1, COL2)
values ('444', 'DDD');
insert into T3 (COL1, COL2)
values ('444', 'DDDD');
commit;
yjdfff 2009-06-14
  • 打赏
  • 举报
回复
你写的这个不对哟,生成的是一个笛卡尔积了
welyngj 2009-06-14
  • 打赏
  • 举报
回复
SELECT T21.COL1,T21.COL2,T31.COL2 FROM (SELECT T2.COL1,T2.COL2 FROM T1,T2 WHERE T1.COL1=T2.COL1) T21
FULL OUTER JOIN (SELECT T3.COL1,T3.COL2 FROM T1,T3 WHERE T1.COL1=T3.COL1) T31 ON T21.COL1=T31.COL1


welyngj 2009-06-14
  • 打赏
  • 举报
回复
SELECT T2.COL1,T2.COL2,T3.COL2 FROM (SELECT T2.COL1,T2.COL2 FROM T1,T2 WHERE T1.COL1=T2.COL1) T21
FULL OUTER JOIN (SELECT T3.COL1,T3.COL2 FROM T1,T3 WHERE T1.COL1=T3.COL1) T31 ON T21.COL1=T31.COL1

17,140

社区成员

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

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