栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

oracle sql 转换成 hive sql -子查询转关联查询(二).子查询显示中max函数类型修改,from中关联子查询

oracle sql 转换成 hive sql -子查询转关联查询(二).子查询显示中max函数类型修改,from中关联子查询

其他sql格式也在更新中,可直接查看俺的这个系列,要是没有你需要的格式,可在评论或私信我,俺现在一天一看

Oracle转换hive
      • 其他sql格式也在更新中,可直接查看俺的这个系列,要是没有你需要的格式,可在评论或私信我,俺现在一天一看
      • 函数子查询有关联条件的语句
      • 函数子查询没有关联条件的语句

函数子查询有关联条件的语句

讲解:因为子查询中 insertstatus 是共同的条件,需要分组(group by),改成关联子查询时需要重写一遍 insertstatus 在select里面,where中的条件是子查询中独有的字段,为什么要分组,因为不分组在下面on中取不到 insertstatus 的值,on中写的是关联的条件,where条件中是取不到子查询外面的a的。(直接复制就行,把自己的字段放进去就行,还不会评论或者私聊)

oracle 原sql

select 
	(select max(transactionno)
		from B
	   where busstype = '71'
		 and insertstatus = a.insertstatus ) as TransactionNo			 
from 
	A a

hive 改sql

select 
	prolc.maxtar as TransactionNo
from 
	A a
	LEFT JOIN
	(select max(transactionno) as maxtar,insertstatus 
	from B 
	where busstype='71' 
	group by insertstatus
	) prolc
	on prolc.insertstatus = a.insertstatus

问:为什么不像上一篇直接关联,还要在from中写一个子查询
答:因为max()函数如何直接关联查询是报错的,报什么–不是单组分组函数–,大概的意思就是这个函数就显示一条数据,但是有其他字段了,其他函数有很多条,它就不会自己判断了

函数子查询没有关联条件的语句

因为子查询中没有和a表的关联条件,直接用逗号隔开就可以了

oracle 原sql

select 
	(select max(transactionno)
		from B
	   where busstype = '71'
		 and insertstatus = '0') as TransactionNo
from 
	A a

hive 改sql

select 
	prolc.maxtar as TransactionNo			 
from 
	A a
	,
	(select max(transactionno) as maxtar
	from B 
	where busstype='71' and insertstatus = '0'
	) prolc
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/581537.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号