多个表数据关联问题,超难的问题,请高手指教

[复制链接]
查看11 | 回复7 | 2012-8-2 22:43:00 | 显示全部楼层 |阅读模式
本帖最后由 aliyan 于 2014-1-23 10:08 编辑
现在有4张表
c1表是主表
tid tname
1a
2b
3c
4d
......
C2表是人员明细表
Pid tidpname
11张三
21 李四
32 王五
42 王二
52牛牛
63 小马
7 3小张
.....
C3表是物资明细表
midtidmname
11物资A
21  物资B
3  1  物资C
41 物资 D
52 物资B
6  2 物资C
74 物资B
8  4物资C
要求以C1为主表关联出来c2,c3表中所有的记录,记录的行数由C2,C3表中对应的记录行最多数为准,不足的为空。c2,c3不一定那个表中记录数多。
row  tid tname  pname     mname
1  1   a    张三     物资A
2  1   a    李四     物资B
3  1   a           物资C
4  1   a           物资 D
5  2   b    王五     物资B
6  2   b    王二     物资C
7  2   b     牛牛
8  3 c     小马    
9  3 c     小张
10  4 d            物资B
11  4 d           物资C




回复

使用道具 举报

千问 | 2012-8-2 22:43:00 | 显示全部楼层
full outer join

回复

使用道具 举报

千问 | 2012-8-2 22:43:00 | 显示全部楼层
select
from(
selectpname, tid, row_number() over (partition by tid order by 1) rn
fromc2
) a
full outer join
(
selectmname, tid, row_number() over (partition by tid order by 1) rn
fromc3
) b
ona.tid and a.rn=b.rn
回复

使用道具 举报

千问 | 2012-8-2 22:43:00 | 显示全部楼层
如果数据库不支持full
就用2个left再union
回复

使用道具 举报

千问 | 2012-8-2 22:43:00 | 显示全部楼层
oracle 10g
回复

使用道具 举报

千问 | 2012-8-2 22:43:00 | 显示全部楼层
如3楼所言!
回复

使用道具 举报

千问 | 2012-8-2 22:43:00 | 显示全部楼层
〇〇 发表于 2014-1-23 10:28
如果数据库不支持full
就用2个left再union

9i就支持了吧。。。
回复

使用道具 举报

千问 | 2012-8-2 22:43:00 | 显示全部楼层
left join+right join
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行