hive中in、not in不支持子查询的改写方法

如题所述

第1个回答  2022-07-18

我们模拟的需求,从A表查询的时候,需要在结果中过滤掉B表中的userid。
上sql

这是我们的正常逻辑,使用not in 过滤掉b表中的userid。但是hive目前,in、not in 是不支持子查询的,就会报我们开始提到的那个错误:
Error:SemanticException [Error 10249]: Line 1:146 Unsupported SubQuery Expression 'userid': Correlating expression cannot contain unqualified column references. ,我们来看看代替方法。

使用jion改写,应该是我们最先想到的一种方式,至于连接的方式,应该根据具体的需求具体分析吧,这里使用left jion示例一下,左联以后,加上b表userid为空的条件,就可以实现我们的需求

其实我们还可以使用EXISTS进行改写,先上sql

EXISTS的语法有时间给大家讲一下,这里就注意几点。
where后面使用NOT EXISTS 时候,不需要跟着字段

where userid NOT IN ()

where userid NOT EXISTS ()
使用了 NOT EXISTS 后面就可以跟一个子查询,而过滤条件,文中是根据userid过滤的,所以这个通过userid的条件写到了子查询的where条件里面去了。

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网