2010-04-27 17 views
30

¿Cómo puedo obtener la diferencia establecida de dos conjuntos de resultados?MySQL: diferencia de dos conjuntos de resultados

decir que tengo un conjunto de resultados (sólo una columna en cada uno):

result1: 
'a' 
'b' 
'c' 

result2: 
'b' 
'c' 

quiero menos lo es en resultado1 por result2: resultado1 - result2 tal que es igual a:

difference of result1 - result2: 
'a' 

Respuesta

50

Para realizar el resultado1 - resultado2, puede unir el resultado1 con el resultado2, y solo los elementos de salida que existen en el resultado1. Por ejemplo:

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

Tenga en cuenta que no es un conjunto diferencia, y no elementos de salida en result2 que no existen en resultado1. Se establece resta.

Consulte también: http://www.bitbybit.dk/carsten/blog/?p=71

+0

Gracias por su aclaración, ha pasado un tiempo desde que trabajé con MySQL. –

9

Si quieres que las cosas en result1 que no están en result2, ¿qué pasa con:

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

O:

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

NOTA: si result1 es un subconjunto de result2 luego las consultas anteriores devolverán un conjunto vacío (no mostrarán las cosas en result2 que no están en result1) por lo que no se establecen diferencias, pero también pueden ser útiles (probablemente sea más eficiente que la combinación externa).

Cuestiones relacionadas