2014-02-17 81 views
0

顯然,我不是一個SQL員工,所以我必須要求幫助完成以下相當簡單的任務。將兩個SQL Server表有條件地合併到第三個表中

我有兩個SQL Server 2008表:t1t2與許多相同的列和一個關鍵列(entry_ID)。 T2具有不存在於t1中的行,但應該存在。

我要合併t2那些行中不存在t1,但我也不想從t2已經在t1存在任何行。我希望結果集填入新的t3

我已經在線查看了許多解決方案,但無法找到上述方案的解決方案。

謝謝。

+0

[this](http://msdn.microsoft.com/en-us/library/bb510625.aspx)應該可以幫助您開始。 – abhi

回答

0

有很多方法可以使用UNION ALLOUTER JOIN

假設你正在使用Entry_ID找到相同的記錄,並且Entry_ID是每個表中是唯一的,這裏是一個OUTER JOIN方法:

這可以讓你的記錄:T1和T2合併:

SELECT 
CASE 
WHEN T1.Entry_ID IS NULL THEN 'T2' 
WHEN T2.Entry_ID IS NULL THEN 'T1' 
ELSE 'Both' 
END SourceTable, 
COALESCE(T1.Entry_ID,T2.Entry_ID) As Entry_ID, 
COALESCE(T1.Col1, T2.Col1) As Col1, 
COALESCE(T1.Col2, T2.Col2) As Col2, 
COALESCE(T1.Col3, T2.Col3) As Col3, 
COALESCE(T1.Col4, T2.Col4) As Col4 
FROM T1 FULL OUTER JOIN T2 
ON T1.Entry_DI = T2.Entry_ID 
ORDER BY COALESCE(T1.Entry_DI,T2.Entry_ID) 

這將其插入到T3:

INSERT INTO T3 (Entry_ID,Col1, COl2,Col3,Col4) 
SELECT 
COALESCE(T1.Entry_DI,T2.Entry_ID) As Entry_ID, 
COALESCE(T1.Col1, T2.Col1) As Col1, 
COALESCE(T1.Col2, T2.Col2) As Col2, 
COALESCE(T1.Col3, T2.Col3) As Col3, 
COALESCE(T1.Col4, T2.Col4) As Col4 
FROM T1 FULL OUTER JOIN T2 
ON T1.Entry_DI = T2.Entry_ID 

同樣的,你一定要注意,Entry_ID需要在其表內是唯一的,它使用這個到T之間的匹配ABLES。

還要注意select列中的列與insert語句中的列列表 - 列表在物理表中的順序無關緊要,INSERT和SELECT只需要排隊。

+0

是的,Entry_ID是兩個表中的主鍵。我將在週二使用你的解決方案。謝謝你的建議。 – user2033850

+0

但是T1中的Entry_ID = 4和T2中的Entry_ID = 4是否表明這些記錄是相同的?通常情況並非如此。通常,您需要使用一堆其他字段來確定記錄是否相同。 –

+0

好點。結果發現t2中的一個字段是不同的,但是這個差別是有效的,但是當兩個表中的Entry_ID相同時,這意味着 – user2033850

相關問題