web-dev-qa-db-ja.com

MySQL:2つの結果セットの違い

2つの結果セットのセットの差を取得するにはどうすればよいですか?

結果セットがあるとしましょう(それぞれに1列だけ):

result1:
'a'
'b'
'c'

result2:
'b'
'c'

Result1にあるものをresult2でマイナスしたい:result1-result2。

 difference of result1 - result2:
 'a'
39
Zombies

Result1-result2を実行するには、result1とresult2を結合し、result1に存在するアイテムのみを出力します。例えば:

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

はセットdifferenceではなく、result1に存在しないresult2のアイテムは出力しないことに注意してください。設定されています減算

関連項目: 関連するブログ投稿のWebアーカイブ版

59
rjh

result1にないものでresult2にないものが必要な場合はどうでしょうか:

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)

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

14
Cloom Magoo