显然,我不是一个SQL人员,所以我必须在以下相当简单的任务上寻求帮助。
我有两个SQL Server 2008表:t1
和t2
,其中包含许多相同的列和一个键列(entry_ID
)。 T2
包含t1
中不存在但应该存在的行。
我想合并t2
中t1
中不存在的t2
中的行,但我也不希望t1
中已存在t3
中的任何行。我希望结果集能够填充新的{{1}}。
我在线查看了很多解决方案,但无法找到上述方案的解决方案。
谢谢。
答案 0 :(得分:0)
有多种方法可以使用UNION ALL
或OUTER 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只需排列。