其他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
新加的链接一位好友的私信sql案例:子查询中多表关联.