【问题标题】:How to find extra/different rows in table compared with another table?与另一个表相比,如何在表中找到额外/不同的行?
【发布时间】:2019-10-28 07:51:41
【问题描述】:

在比较 SQL Server 中的两个表时,我试图找出多余或不同的行。

例如,#temp1 有 5000 行,#temp2 有 5125 行。

我试过了

SELECT * FROM #temp1
EXCEPT
SELECT * FROM #temp2

但它返回空结果。

所以我尝试了

SELECT * FROM #temp1
INTERSECT
SELECT * FROM #temp2

这将返回 5000 行,这是来自 #temp1 的行数,因此这表明 #temp2 包含 #temp1 中存在的所有行,但它只有 125 个额外的行。我正在尝试编写一个查询,仅显示#temp2 中额外的 125 行。

【问题讨论】:

    标签: sql database rows except


    【解决方案1】:

    您的订单不正确

    SELECT * FROM #temp2
    EXCEPT
    SELECT * FROM #temp1
    

    【讨论】:

    • 我正在使用 SQL Server,我认为 SQL Server 不存在 MINUS,因为我刚刚尝试过。
    • 更新了我的答案
    【解决方案2】:

    你可以试试这个

    SELECT * 
    FROM #table2 
    WHERE NOT EXISTS 
        (SELECT * 
         FROM #table1 
         WHERE #table1.PK = #table2.PK)
    

    或者

    SELECT *
    FROM #table2 t1
    LEFT JOIN #table2 t2 ON t2.PK = t1.PK
    WHERE t2.PK IS NULL
    

    这适用于任何 SQL 数据库

    【讨论】:

      【解决方案3】:

      一种有趣的方式是:

      (SELECT * FROM #temp2
       UNION 
       SELECT * FROM #temp2
      ) EXCEPT
      (SELECT * FROM #temp1
       INTERSECT
       SELECT * FROM #temp2
      )
      

      这仅显示不同的唯一行。它没有显示他们最初在哪个表中。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-09-22
        • 2022-06-12
        • 2019-10-24
        • 2021-12-14
        • 2015-02-16
        • 2021-03-06
        • 2020-07-27
        • 2020-09-30
        相关资源
        最近更新 更多