Comment puis-je obtenir la différence d'ensemble de deux ensembles de résultats?
Disons que j'ai un ensemble de résultats (une seule colonne dans chacun):
result1:
'a'
'b'
'c'
result2:
'b'
'c'
Je veux réduire ce qui est dans result1 par result2: result1 - result2 de telle sorte qu'il soit égal à:
difference of result1 - result2:
'a'
Pour exécuter result1 - result2, vous pouvez joindre result1 à result2, et uniquement les éléments de sortie qui existent dans result1. Par exemple:
SELECT DISTINCT result1.column
FROM result1 LEFT JOIN result2 ON result1.column = result2.column
WHERE result2.column IS NULL
Notez que ce n'est pas une différence d'ensemble , et ne sortira pas les éléments dans result2 qui n'existent pas dans result1. Il est défini soustraction .
Voir aussi: version archivée Web de l'article de blog pertinent .
Si vous voulez des choses dans result1
qui ne sont pas dans result2
, qu'en est-il de:
SELECT distinct result1
FROM t1
WHERE result1 NOT IN (select distinct result2 from t2);
Ou:
SELECT distinct result
from t1 t
where NOT EXISTS (select 1 from t2 where result2 = t.result1)
REMARQUE: si result1
est un sous-ensemble de result2
alors les requêtes ci-dessus renverront un ensemble vide (elles ne vous montreront rien dans result2
qui ne sont pas dans result1
) afin qu'ils ne soient pas définis comme des différences, mais peuvent également être utiles (probablement plus efficaces que la jointure externe).