2017-06-23 69 views
2

假設我有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 
+0

我認爲[this](https://stackoverflow.com/questions/20951703/insert-into-where-not-exists-in-hive)是一個很好的參考。 – arcticwhite

+0

Duplicate:https://stackoverflow.com/questions/20880124/hive-command-to-execute-not-in-clause – philantrovert

+0

Philantrovert,arcticwhite謝謝我理解爲由philantrovert所反映,它可以用左外連接完成。 – user8167344

回答

2

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%確定相關列不包含空值。
一個空值足以導致您的查詢不返回任何結果。

+0

嘟嘟,很好的幫助!謝謝大家。 – user8167344

+0

嗨Dudu,你能詳細說明'不是空'問題嗎? – Amir

+1

@Amir,SQL標準將'x不在(a,b,c)'中作爲x <> a和x <> b和x <> c'。如果例如c是NULL,那麼'x <> c'是UNKNOWN,因此整個表達式是UNKNOWN。 UNKNOWN被視爲FALSE。這意味着無論「x」值是什麼,查詢都不會返回任何行。 –