私はいつもについて知られているUNION
SQLでのオペレータが、ごく最近、他の集合演算子があったことを発見し、INTERSECT
そしてEXCEPT
。4番目の大きな集合演算子である対称差(たとえば、の逆INTERSECT
)を行う演算子を見つけることができませんでした。
私は次のようなものを使用して目的の出力を取得できるようです
SELECT Field FROM A UNION SELECT Field FROM B
EXCEPT
SELECT Field FROM A INTERSECT SELECT Field FROM B
(私が優先権を正しく持っていると仮定して)、または反完全結合を実行することによって:
SELECT A.Field, B.Field
FROM A
FULL JOIN B ON B.Id = A.Id
WHERE B.Id IS NULL OR A.Id IS NULL
しかし、これらはどちらも、特に他の3つの基本的な集合演算と比較して、かなり集中的なクエリのように見えます。SQLに対称差分演算はありますか?ドキュメントでそれを見つけることができませんか?それとも、T-SQLに実装する「標準的な」方法はありますか?
3つの結合または結合のような操作を行う@ypercube。これが完全結合よりも効率的である理由は考えられません。
—
usr 2015年
@usrは、実際には3ではなく、2つのjoin-likeオペレーションです。UnionAllは、はるかにコストのかからないオペレーションです。私はそれ
—
ypercubeᵀᴹ
FULL JOIN
がより効率的かもしれないことに同意します。テストにより、どちらが最適かを明らかにできます。そしてもちろん、各テーブルからさらに多くの/異なる列が必要な場合、私のソリューションは簡単に拡張できません。
(a EXCEPT b) UNION ALL (b EXCEPT a);
より効率的かもしれません。