2015-11-10 261 views
0

我有兩個表。 Table A是主表,table B是輔助表。現在我需要從table Btable A只行了aux_id不存在table A將唯一數據從一個表複製到另一個表

TABLE_A

id |aux_id | firstname | lastname 

表-B

aux_id | firstname | lastname 

我試圖複製,但顯然沒有成功。

INSERT INTO table_A(aux_id,firstname,lastname)(SELECT aux_id,firstname,lastname FROM table_B WHERE aux_id != aux_id); 

我越來越:INSERT 0 0

這是錯誤的,因爲我相信,我有表B中的新條目

回答

6

有很多方法可以做到這一點(left joinnot existsnot in )。如果你正在學習SQL,NOT IN,可能是最簡單的第一次遇到:

INSERT INTO table_A(aux_id, firstname, lastname) 
    SELECT aux_id, firstname, lastname 
    FROM table_B 
    WHERE b.aux_id NOT IN (SELECT a.aux_id FROM table_A a); 

我應該說我更喜歡NOT EXISTS

WHERE NOT EXISTS (SELECT 1 FROM table_A a WHERE a.aux_id = b.aux_id); 

原因與NULL值的處理做。 NOT EXISTS做你的期望。 NOT IN如果子查詢返回NULL值,則永不返回真。

+0

謝謝。什麼是「SELECT 1」? – user455318

+1

它更有效一些。 SELECT 1不需要postgresql來分配一個結果集,而是SELECT *所做的。由於我們只測試是否有任何結果,分配的努力毫無價值。 – byMike

相關問題