MySQL: différence de deux ensembles de résultats
-
01-10-2019 - |
Question
Comment puis-je obtenir la différence de jeu de deux ensembles de résultats?
que j'ai un ensemble de résultats (une seule colonne dans chaque):
result1:
'a'
'b'
'c'
result2:
'b'
'c'
Je veux moins ce qui est en result1 par result2: result1 - result2 tel qu'il est égal à:
difference of result1 - result2:
'a'
La solution
Pour effectuer result1 - result2, vous pouvez rejoindre result1 avec result2, et seuls 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 n'est pas un ensemble différence , et ne seront pas les éléments de sortie result2 qui n'existent pas dans result1. Ce jeu de soustraction .
Voir aussi: Version archive'd Web de blog concerné .
Autres conseils
Si vous voulez que les choses en result1
qui ne sont pas result2
, qu'en est:
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 renvoie un ensemble vide (ils ne seront pas vous montrer les choses dans result2
qui ne sont pas result1
), mais peuvent aussi être utiles si elles ne sont pas de différence jeu ( sans doute il est plus efficace que la jointure externe).