oracle-full_join-多张表横向关联,拼接多张表所需字段
我们在sql中使用最多的关联查询无非是left join.right join,union,union all。 这几种关联的区别和用法别的教程都太多了 这里不赘述. 这里讲一下full join的用法 1.需求 需要做一张统计表 要能实现多级表头 但是这个数据又不是一张表中存在的,分为了乔木,灌木,行道树,古树 四张表 那么为了最简单有效办法就是考虑在sql中实现了
2.实现 直接上代码,有注意的地方会在sql中标出来
select * from --最外层一个select,如果不需要rownum可以把*替换成你想要的字段或者使用mybatis中的resultType指定映射字段
(select rownum rn,A.* --这里需要 rownum 否则数据会是杂乱无章且重复的
from (
select catagoryA,count(catagory) amountA
from 表A group by catagory order by amount
)A)B
FULL JOIN --以full join 拼接
(select rownum rn,C.*
from (
select catagoryC,count(catagory) amountC
from 表C group by catagory order by amount
)C)D
ON B.rn=D.rn --直接以rn相等就行了
FULL JOIN
(select rownum rn,E.*
from (
select catagoryE,count(catagory) amountE
from 表E group by catagory order by amount
)E)F
ON D.rn=F.rn or B.rn=F.rn --注意 超过两张表的情况下on后面需要以(表数-2)个or拼接
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
注意:如果数据和表特别多,这种拼接写法会有很明显的性能问题
编辑 (opens new window)
上次更新: 2024-11-06, 19:27:10