与另一个 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。
我在比较 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。