将两个SQL Server表有条件地合并到第三个表中

时间:2014-02-17 22:42:07

标签: sql-server-2008

显然,我不是一个SQL人员,所以我必须在以下相当简单的任务上寻求帮助。

我有两个SQL Server 2008表:t1t2,其中包含许多相同的列和一个键列(entry_ID)。 T2包含t1中不存在但应该存在的行。

我想合并t2t1中不存在的t2中的行,但我也不希望t1中已存在t3中的任何行。我希望结果集能够填充新的{{1}}。

我在线查看了很多解决方案,但无法找到上述方案的解决方案。

谢谢。

1 个答案:

答案 0 :(得分: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在其表中必须是唯一的,并且它使用它来匹配表之间。

另请注意,select语句中的列与insert语句中的列列表一致 - 物理表中列的顺序无关紧要,INSERT和SELECT只需排列。