在hive中,我使用两个表,每个表都有相同的字段。我只需要表“one”中不在表“two”中的行。在这个时候,我没有得到任何返回结果。
表1
id | category
i_1 | c_123
i_1 | c_234
i_1 | c_345
i_1 | c_456
i_2 | c_456
表二
id | category
i_1 | c_345
下面是我当前的代码(不返回任何行):
select a.id, a.category
from one a
left join two b
on a.id=b.id
where a.category != b.category;
理想的结果应该是这样的:
id | category
i_1 | c_123
i_1 | c_234
i_1 | c_456
i_2 | c_456
2条答案
按热度按时间kfgdxczn1#
也许这就是你想要的:
sql fiddle演示
这将返回表1中与id和category匹配的表2中不存在的所有记录。您的查询正在否定
outer join
. 我不确定hive
支架not exists
,但这可能更有效。pod7payv2#
此解决方案仅适用于Hive0.13+。
这是参考手册
NOT EXISTS
条款。值得一提的是,它可以比
LEFT JOIN
与WHERE x IS NULL
在一些数据库管理系统上。我认为这是一个更好的实践,因为您不需要阅读整个查询就可以注意到
LEFT JOIN
实际上是反连接。