orcle报表SQL问题

locoasta 2010-09-10 03:48:59
现在有3张表 A,B,C B,C都是外键和A关联的。
A                      B                                 C
ID value1 AID value2 AID value3
1 abc 1 a1 1 a11
2 aaa 1 a2 2 a22
3 ddd 2 b1 2 a33
3 c1 3 a44


查询结果是这样的
1    abc   1   a1     1   a11
1 abc 1 a2
2 aaa 2 b1 2 a22
2 aaa 2 a33
3 ddd 3 c1 3 a44

B,C和C没关联关系,但是都是A的外键 ,A关键 B.C记录多的那个表,没数据的就空。
一条SQL。

感谢高手帮忙看看。
...全文
140 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
locoasta 2010-09-13
  • 打赏
  • 举报
回复

select t1.*,t2.* from a full outer join ( with t2 as (select idb id_b, value2 ,row_number() over(partition by idb order by idb asc) rn2 from b),
t3 as (select idc id_c, partcode ,row_number() over(partition by idc order by idc asc) rn3 from c)
select t2.*,t3.*
from t3 full outer join t2 on t2.id_b = t3.id_c and t2.rn2 = t3.rn3 ) t2 on t1.id= t2.id_b or t1.id = t3.id_c

但是效率不行。。咳,
先对付着客户先//感谢各位的关注,结贴了
locoasta 2010-09-10
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 minitoy 的回复:]

SQL code
with t1 as (select id id_a, value1 ,row_number()over(partition by id order by value1 asc) rn1 from a),
t2 as (select aid id_b, value2 ,row_number()over(partition by aid order by value2……
[/Quote]
你的思路应该是对的,我有点头绪了。。下班了 下个星期1来验证验证 。
非常感谢各位大大的发言。
有什么好的思路可以探讨探讨~!
zaizaizaizaizai 2010-09-10
  • 打赏
  • 举报
回复

我分析是A表为主
left join
但是B表中有数据 就对应上A表 但是C表有数据还有对应B对应A
如果B没有数据 C表有数据 还要对应上A

强!

等待高手
minitoy 2010-09-10
  • 打赏
  • 举报
回复
还是错的.写不出来了,等高手来解决
minitoy 2010-09-10
  • 打赏
  • 举报
回复
with t1 as (select id id_a, value1 ,row_number()over(partition by id order by value1 asc) rn1 from a),
t2 as (select aid id_b, value2 ,row_number()over(partition by aid order by value2 asc) rn2 from b),
t3 as (select aid id_c, value3 ,row_number()over(partition by aid order by value3 asc) rn3 from c)
select t1.id_a,value1,t2.id_b,value2,t3.id_c,value3
from t1,t2,t3
where t1.id_a=t2.id_b(+) and t1.id_a=t3.id_c(+) and t1.rn1=t2.rn2(+) and t1.rn1=t3.rn3(+);
minitoy 2010-09-10
  • 打赏
  • 举报
回复
额,明白你要什么了
locoasta 2010-09-10
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 zhuomingwang 的回复:]

引用 2 楼 locoasta 的回复:
表A B C 都是百万行记录
在各表的id上建索引了么?
[/Quote]主外键 所以速度问题不用担心,但是要做合并表什么的 鸭梨很大。。
locoasta 2010-09-10
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 minitoy 的回复:]

select a.id,a.value1,b.aid aid1,b.value2,c.aid aid3,c.value3
from a,b,c
where a.id=b.aid(+) and a.id=c.aid(+)
[/Quote]

你的这种写法不对的,如果A1条记录 B 2条记录 C 5条 你这样就是10条 而不只需要产生5条
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 locoasta 的回复:]
表A B C 都是百万行记录
[/Quote]在各表的id上建索引了么?
minitoy 2010-09-10
  • 打赏
  • 举报
回复
ee,你怎么能编辑帖子的.刚我看的时候格式不是这样的啊
  • 打赏
  • 举报
回复
select a.*,b.*,c.*
from a,b,c
where a.id=b.id(+)
and a.id=c.id(+)
minitoy 2010-09-10
  • 打赏
  • 举报
回复
那么多记录,估计会很慢
minitoy 2010-09-10
  • 打赏
  • 举报
回复
select a.id,a.value1,b.aid aid1,b.value2,c.aid aid3,c.value3
from a,b,c
where a.id=b.aid(+) and a.id=c.aid(+)
locoasta 2010-09-10
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 minitoy 的回复:]

关联条件是啥啊...
[/Quote]
A.ID和B.AID A.ID和C.AID关联
locoasta 2010-09-10
  • 打赏
  • 举报
回复
表A B C 都是百万行记录
minitoy 2010-09-10
  • 打赏
  • 举报
回复
关联条件是啥啊...

17,086

社区成员

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

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