同じ正確な構造(同じ列名)を持つ2つのテーブルを比較したいと思います。
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]
コメントを追加