ここに投稿され、回答された問題に対して、オラクルにも同様に洗練されたソリューションがあるのだろうか。
NULLSを含むことができる列の比較-よりエレガントな方法はありますか?
このソリューション(受け入れられたソリューション)をOracle環境で機能させることができません。
これは、受け入れられた答えと同等のOracleである必要があります。
SELECT *
FROM a a1
JOIN b b1
ON a1.id = b1.id
AND EXISTS(SELECT * FROM a a2 where a2.id = a1.id
MINUS
SELECT * FROM b b2 where b2.id = b1.id);
これまでにselect a.*
を見たことがありません(つまり、定数値の代わりにエイリアスを使用するselect
句のないFROM
)が、相互に関連するサブクエリにマップされると思います
ある日の答えはOracleでも同様に機能することに注意してください(except
をminus
に置き換える場合)。
WITH a_minus_b AS (
SELECT *
FROM A
minus
SELECT *
FROM B
)
SELECT *
FROM a_minus_b T
JOIN B ON T.ID = B.ID;
SQLFiddle: http://sqlfiddle.com/#!4/3f369/1
完全を期すために:標準SQLでは、これは次のように記述できます。
SELECT *
FROM a
JOIN b
ON a.id = b.id
where (a.string, a.dt, a.b, a.num) is distinct from (b.string, b.dt, b.b, b.num);
これは例えばPostgresでサポート: http://sqlfiddle.com/#!15/b431b/1