orcle 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拼接 
	

注意:如果数据和表特别多,这种拼接写法会有很明显的性能问题

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值