2010-04-27 8 views
30

Comment puis-je obtenir la différence de jeu de deux ensembles de résultats?MySQL: différence de deux ensembles de résultats

que j'ai un jeu 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' 

Répondre

50

Pour effectuer result1 - result2, vous pouvez joindre result1 avec 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 n'est pas un ensemble différence, et ne seront pas les éléments de sortie en result2 qui n'existent pas dans result1. C'est réglé soustraction.

Voir aussi: http://www.bitbybit.dk/carsten/blog/?p=71

+0

Merci pour votre clarification, cela fait un moment que j'ai travaillé avec MySQL. –

9

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 puis les requêtes ci-dessus retourneront un ensemble vide (ils ne vous montreront pas les choses dans result2 qui ne sont pas dans result1) afin qu'ils ne soient pas définis différence, mais peuvent être utiles aussi (probablement c'est plus efficace que la jointure externe).

Questions connexes