結合しない - MySQL: 2 つの結果セットの違い



sql union 列名 異なる (2)

2つの結果セットの差をどのように取得できますか?

結果セットがあるとします(それぞれに1つの列のみ)。

result1:
'a'
'b'
'c'

result2:
'b'
'c'

私はresult2によってresult1にあるものをマイナスしたい:result1 - result2は等しくなる:

 difference of result1 - result2:
 'a'

https://src-bin.com


Answer #1

result1 - result2を実行するには、result1をresult2に結合し、result1に存在する項目のみを出力します。 例えば:

SELECT DISTINCT result1.column
FROM result1 LEFT JOIN result2 ON result1.column = result2.column
WHERE result2.column IS NULL

これは設定の違いではなく、result1に存在しないresult2の項目を出力しないことに注意してください。 これは減算を設定したものです。

こちらもhttp://www.bitbybit.dk/carsten/blog/?p=71http://www.bitbybit.dk/carsten/blog/?p=71 : http://www.bitbybit.dk/carsten/blog/?p=71


Answer #2

result1れていないものをresult1入れたい場合、

SELECT distinct result1
FROM t1 
WHERE result1 NOT IN (select distinct result2 from t2);

または:

SELECT distinct result
from t1 t
where NOT EXISTS (select 1 from t2 where result2 = t.result1)

注: result1result1のサブセットである場合、上記のクエリーは空のセットを返します( result2にはresult2ないものはresult2されません)ので、差異は設定されませんが、役に立つかもしれません外部結合より効率的です)。





set-difference