我想比较两个具有相同确切结构的表(相同的列名)。
DROP TABLE IF EXISTS my_before;
DROP TABLE IF EXISTS my_after;
CREATE TABLE my_before
(
pk INT NOT NULL IDENTITY(1, 1) PRIMARY KEY,
myvalue INT NULL
);
CREATE TABLE my_after
(
pk INT NOT NULL IDENTITY(1, 1) PRIMARY KEY,
myvalue INT NULL
);
INSERT INTO my_before (myvalue) VALUES (10), (NULL), (12), (NULL);
INSERT INTO my_after (myvalue) VALUES (10), (11), (NULL), (NULL), (NULL), (14);
我想输出my_before和my_after之间的差异。
查询是什么样的?
您可以使用进行此操作full join
,但是(处理NULL
值)的正确逻辑是:
SELECT a.*, b.*
FROM my_before a FULL OUTER JOIN
my_after b
ON a.pk = b.pk
WHERE a.pk IS NULL OR
b.pk IS NULL OR
a.my_value <> b.my_value OR
(a.my_value IS NULL AND b.my_value IS NOT NULL) OR
(a.my_value IS NOT NULL AND b.my_value IS NULL);
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句