2014-06-13 65 views
0

我有一個SQL插入語句,只有當記錄不存在於表2中或者郵政編碼在表1中有更改時,才需要將記錄插入另一個表中。我曾嘗試以下,但它拋出一個錯誤,這是我要找的邏輯:SQL插入數據如果列A匹配並且列B不包含

INSERT INTO table2 
SELECT id, zip 
FROM table1 t1 
JOIN table2 t2 
ON t1.id = t2.id and t1.zip <> t2.zip 

我還需要它來插入記錄如果ID不表2中存在的。我把這個垃圾從這裏弄出來,似乎無法在任何地方找到解決方案。

+1

取決於你的SQL服務器版本'MERGE'可能是一個很好的起點。 http://technet.microsoft.com/en-us/library/bb522522(v=sql.105).aspx –

回答

0

這個怎麼樣?

INSERT INTO table2 
SELECT t2.id, t2.zip 
FROM table1 t1 
LEFT OUTER JOIN table2 t2 
ON t1.id = t2.id 
WHERE (t1.id IS NULL OR t2.zip <> t1.zip) 

此外,一定要弄清楚其表的idzip列你所要求的。

+0

真棒這工作正如我所需要的。 – Ironsides24

-1

你只需要一個WHERE NOT EXISTS子句

INSERT INTO table2 
SELECT id, zip 
FROM table1 
WHERE NOT EXISTS (SELECT 1 FROM table2 WHERE table2.id = table1.id AND table2.zip = table1.zip) 
0

在插入時應始終包含列列表。其次,您的查詢不完全捕捉您的邏輯。您需要left outer join來查找第二個表中不存在的記錄。也許這可能會做你想要的:

INSERT INTO table2(id, zip) 
SELECT id, zip 
FROM table1 t1 LEFT JOIN 
    table2 t2 
    ON t1.id = t2.id 
WHERE (t1.zip <> t2.zip) or (t2.zip is null) 
+0

謝謝我做的t2.id是空的,而且它工作正常。我已經將列名添加到插入內容中,但爲了簡潔起見,未在此添加它們 – Ironsides24

相關問題