这是我一直在研究的问题,我有三个表,所有表共享3个相同的列但是每行都有唯一的行。我想结合所有表而不重复行。我有一个有效的解决方案,但我觉得它可能不是最有效的。我尝试使用连接,但发现没有父表,我没有得到预期的结果数。我的解决方案确实产生了正确数量的结果(为简单起见,我已经删除了一些列):
--Create table
CREATE TABLE #Temp
(
ID,
Date
)
-- Insert rows that are only in db1
INSERT INTO #Temp
SELECT
ID,
Date
FROM test.dbo.db1
-- Do not include rows shared by db1 and db2
EXCEPT
(
SELECT
ID,
Date
FROM test.dbo.db2
INTERSECT
SELECT
ID,
Date
FROM test.dbo.db1
)
EXCEPT
-- And not in db1 and db3
(
SELECT
ID,
Date
FROM test.dbo.db1
INTERSECT
SELECT
ID,
Date
FROM test.dbo.db3
)
EXCEPT
-- And not in db1, db2 and db3
** Code where I intersect all 3 tables
我对所有三个表重复上述步骤,然后为每个组合ID /日期添加交叉点(db1 + d2 + db3,db1 + db2等等)
有没有人知道这样做的方法更直接,更重要?我已经尝试过对所有这些进行完全连接,但是如果没有包含所有ID的父表,我发现只显示在其他两个表中的ID不显示。
答案 0 :(得分:6)
SELECT
ID,
Date
FROM test.dbo.db1
UNION
SELECT
ID,
Date
FROM test.dbo.db2
UNION
SELECT
ID,
Date
FROM test.dbo.db3
UNION
负责删除重复项。