SQL Server - 在没有父表的情况下连接三个表的更有效方法

时间:2017-12-21 20:18:21

标签: sql-server

这是我一直在研究的问题,我有三个表,所有表共享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不显示。

1 个答案:

答案 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负责删除重复项。