2014-06-27 37 views
0

對不起,因爲不好的標題,不知道如何很好地說出我的問題。 現在我有兩個表:如何插入項目名稱不在表A中的所有行到表B中的表A

表A:

GUID   Project State 
1####  A ###  Active 
2####  B ###  Active 
3####  C###  Active 
4####  D ###  Active 

表B是資源表中,有幾列,一列也是項目,我想的東西做的是:

如果表B中有一個不在表A中的項目,請將其添加到表A中,併爲其指定GUID和非活動狀態。

但我不知道如何實現這一點,嘗試了幾個插入選擇,不工作,假設我需要使用存在條件?

回答

2

您可以使用NOT IN和子查詢。就像這樣:

INSERT INTO TableA (....) 
    SELECT 
    .... 
    FROM TableB 
    WHERE Project NOT IN (SELECT Project FROM TableA) 

這也可以用左手完成加入這樣的:

INSERT INTO TableA (....) 
    SELECT 
    .... 
    FROM TableB B 
    LEFT JOIN TableA A ON B.Project = A.Project 
    WHERE A.Project IS NULL 

你可以看到你的服務器軟件多好通過檢查執行計劃是這兩個相同查詢。

+0

不錯,整潔,謝謝! – SSilicon

0
INSERT INTO A 
SELECT some_way_to_get_guid(), b.project, 'inactive' FROM B 
WHERE b.project NOT IN (SELECT project FROM A); 

WHERE子句是所謂的反半

+0

(Hogan擊敗了我。) –

+0

從來不知道以前沒有... – SSilicon

+0

@AndrewLazarus - 你對「反半連接」的評論讓我加入了連接的例子。 – Hogan

相關問題