检测表之间差异的有效方法 - 除了不起作用
Efficient way to detect difference between tables in - EXCEPT not working
我尝试使用 EXCEPT(不确定是否最好?):
IF OBJECT_ID('tempdb..#t1') IS NOT NULL DROP TABLE #t1;
IF OBJECT_ID('tempdb..#t2') IS NOT NULL DROP TABLE #t2;
SELECT
*
INTO #t1
FROM
(
SELECT '001' AS id, '1' AS type, 40 AS cost
UNION
SELECT '002' AS id, '2' AS type, 50 AS cost
) AS IQ1;
SELECT
*
INTO #t2
FROM
(
SELECT '001' AS id, '1' AS type, 40 AS cost
UNION
SELECT '002' AS id, '2' AS type, 50 AS cost
UNION
SELECT '003' AS id, '2' AS type, 50 AS cost
) AS IQ1;
SELECT * FROM #t1;
SELECT * FROM #t2;
SELECT * FROM #t1
EXCEPT
SELECT * FROM #t2;
它似乎不起作用。有任何想法吗?用例是有效地检测#t2 中的新行,但也有差异,例如我们:
SELECT '002' AS id, '2' AS type, 51 AS cost
此处的 51 与 #t1 中的 50 不同。希望这是有道理的?
我想你也想比较#t2 和#t1。 #t2 有更多行。
EXCEPT
运算符将 select 来自 第一个 table 的所有行,并删除 中的所有行]秒table。所以如果 #t2
有更多的行,你永远不会知道。
SELECT * FROM #t1
EXCEPT
SELECT * FROM #t2
UNION ALL
SELECT * FROM #t2
EXCEPT
SELECT * FROM #t1;
我尝试使用 EXCEPT(不确定是否最好?):
IF OBJECT_ID('tempdb..#t1') IS NOT NULL DROP TABLE #t1;
IF OBJECT_ID('tempdb..#t2') IS NOT NULL DROP TABLE #t2;
SELECT
*
INTO #t1
FROM
(
SELECT '001' AS id, '1' AS type, 40 AS cost
UNION
SELECT '002' AS id, '2' AS type, 50 AS cost
) AS IQ1;
SELECT
*
INTO #t2
FROM
(
SELECT '001' AS id, '1' AS type, 40 AS cost
UNION
SELECT '002' AS id, '2' AS type, 50 AS cost
UNION
SELECT '003' AS id, '2' AS type, 50 AS cost
) AS IQ1;
SELECT * FROM #t1;
SELECT * FROM #t2;
SELECT * FROM #t1
EXCEPT
SELECT * FROM #t2;
它似乎不起作用。有任何想法吗?用例是有效地检测#t2 中的新行,但也有差异,例如我们:
SELECT '002' AS id, '2' AS type, 51 AS cost
此处的 51 与 #t1 中的 50 不同。希望这是有道理的?
我想你也想比较#t2 和#t1。 #t2 有更多行。
EXCEPT
运算符将 select 来自 第一个 table 的所有行,并删除 中的所有行]秒table。所以如果 #t2
有更多的行,你永远不会知道。
SELECT * FROM #t1
EXCEPT
SELECT * FROM #t2
UNION ALL
SELECT * FROM #t2
EXCEPT
SELECT * FROM #t1;