2016-02-13 25 views
1

所以我目前正在試圖拿一張桌子,並將其添加到另一個表中,但由於某種原因,它不按我想要的方式工作。 這兩個表中有三列,我只想從表2中的每行數據添加到表1,如果表2的前2列不在表1中(我不在意第三列)SQL:如何添加到表中而沒有重複項?

這是我到目前爲止有:

INSERT INTO table1 (col1, col2, col3) 
    SELECT a.col1, a.col2, a.col3 
    FROM table2 as a 
    WHERE NOT EXISTS (SELECT b.col1, b.col2 
         FROM table1 as b 
         WHERE a.col1 = b.col1 AND a.col2 = b.col2); 

我檢查四周,這似乎它應該工作,但它不是,但任何人都可以看到,爲什麼?

+1

這個語法是正確的 - 它有時被稱爲反連接。這實際上是您嘗試進行的首選方式。我唯一要補充的是,select中「不存在」的列是不必要的。使用半連接或反連接,您可以「簡單選擇1」或「選擇空」。也就是說,你所做的沒有任何問題。你能解釋一下錯誤,並在兩個表的數據前後顯示一些樣本。 *你做了什麼應該可以工作* – Hambone

+0

@spaceboound這個查詢是正確的。你可能會在別的地方出錯。如果你能把屏幕截圖顯示錯誤信息或輸出結果會更好。 –

回答

0

當有兩個字段要搜索時,我經常遇到麻煩。一種方法是將它們結合在一起:

INSERT INTO table1 (col1, col2, col3) 
    SELECT a.col1, a.col2, a.col3 from table2 as a 
    WHERE concat(a.col1,':', a.col2) 
    NOT IN (SELECT concat(col1,':',col2) from table1); 

另一種方式是左連接:

INSERT INTO table1 (col1, col2, col3) 
    SELECT a.col1, a.col2, a.col3 
    from table2 as a 
    LEFT OUTER JOIN table1 as b 
    ON a.col1 = b.col1 
    AND a.col2 = b.col2 
    WHERE b.col1 IS NULL AND b.col2 IS NULL; 

例如2,最好是在where子句中使用主鍵。

0

試試這個:

INSERT INTO table1 (col1, col2, col3) 
(SELECT a.col1, a.col2, a.col3 
FROM table2 a 
WHERE NOT EXISTS (SELECT b.col1, b.col2 
        FROM table1 b 
        WHERE a.col1 = b.col1 AND a.col2 = b.col2)); 

我猜表名是沒有必要的。

0

試試這個:

merge into tab2 a 
using 
(select col1,col2,col3 from tabl1) b 
on 
(b.col1=a.col1 and b.col2=a.col2) 
when not matched then 
insert (a.col1,a.col2,a.col3) 
values 
(b.col1,b.col2,b.col3); 
相關問題