假設我有2個表格,如下所示。現在,如果我要實現結果的SQL會給使用,insert into B where id not in(select id from A)
將表B.如何在Hive中使用NOT IN
插入3 George
如何實現這在蜂巢?
表A
id name
1 Rahul
2 Keshav
3 George
表B
id name
1 Rahul
2 Keshav
4 Yogesh
假設我有2個表格,如下所示。現在,如果我要實現結果的SQL會給使用,insert into B where id not in(select id from A)
將表B.如何在Hive中使用NOT IN
插入3 George
如何實現這在蜂巢?
表A
id name
1 Rahul
2 Keshav
3 George
表B
id name
1 Rahul
2 Keshav
4 Yogesh
NOT IN在WHERE與不相關子查詢子句是supported since Hive 0.13這是3年多前公佈,2014年4月21日,。
select * from A where id not in (select id from B where id is not null);
+----+--------+
| id | name |
+----+--------+
| 3 | George |
+----+--------+
在較早的版本中,應使用表名/別名限定外部表的列。
hive> select * from A where id not in (select id from B where id is not null);
FAILED: SemanticException [Error 10249]: Line 1:22 Unsupported SubQuery Expression 'id': Correlating expression cannot contain unqualified column references.
hive> select * from A where A.id not in (select id from B where id is not null);
OK
3 George
附:
使用時NOT IN您應該將is not null
添加到內部查詢中,除非您100%確定相關列不包含空值。
一個空值足以導致您的查詢不返回任何結果。
嘟嘟,很好的幫助!謝謝大家。 – user8167344
嗨Dudu,你能詳細說明'不是空'問題嗎? – Amir
@Amir,SQL標準將'x不在(a,b,c)'中作爲x <> a和x <> b和x <> c'。如果例如c是NULL,那麼'x <> c'是UNKNOWN,因此整個表達式是UNKNOWN。 UNKNOWN被視爲FALSE。這意味着無論「x」值是什麼,查詢都不會返回任何行。 –
我認爲[this](https://stackoverflow.com/questions/20951703/insert-into-where-not-exists-in-hive)是一個很好的參考。 – arcticwhite
Duplicate:https://stackoverflow.com/questions/20880124/hive-command-to-execute-not-in-clause – philantrovert
Philantrovert,arcticwhite謝謝我理解爲由philantrovert所反映,它可以用左外連接完成。 – user8167344