11

列 ID を持つ 2 つのテーブル A と B があります。Bに存在しないIDをAから取得したい.明白な方法は次のとおりです。

SELECT id FROM A WHERE id NOT IN (SELECT id FROM B)

残念ながら、Hive は in、exists、subqueries をサポートしていません。結合を使用して上記を達成する方法はありますか?

私は次のことを考えました

SELECT A.id FROM A,B WHERE A.id<>B.id

しかし、A のどの ID とも等しくない ID が B に常に存在するため、これは A の全体を返すようです。

4

4 に答える 4

26

LEFT OUTER JOINHiveの a でも同じことができます。

SELECT A.id
FROM A
LEFT OUTER JOIN B
ON (B.id = A.id)
WHERE B.id IS null
于 2013-05-29T03:06:17.867 に答える
6

Hive はINNOT INEXISTおよびNOT EXISTS0.13 からサポートするようです。

select count(*)
from flight a
where not exists(select b.tailnum from plane b where b.tailnum = a.tailnum);

とのサブクエリにはEXISTNOT EXISTS述語が関連付けられている必要があります (b.tailnum = a.tailnum上記のサンプルのように)。詳細については、Hive Wiki > WHERE 句のサブクエリを参照してください。

于 2015-02-05T01:02:09.773 に答える