与另一个 table 相比,如何在 table 中找到 extra/different 行?

How to find extra/different rows in table compared with another table?

我在比较 SQL 服务器中的两个表时试图找到额外的或不同的行。

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

我试过

SELECT * FROM #temp1
EXCEPT
SELECT * FROM #temp2

但它 returns 为空结果。

所以我尝试了

SELECT * FROM #temp1
INTERSECT
SELECT * FROM #temp2

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

您的订单有误

SELECT * FROM #temp2
EXCEPT
SELECT * FROM #temp1

你可以试试这个

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 数据库

一个有趣的方法是:

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

这仅显示不同的唯一行。它没有显示它们最初位于哪个 table。