MySQL: diferencia de dos conjuntos de resultados
-
01-10-2019 - |
Pregunta
¿Cómo puedo obtener la diferencia de conjuntos de dos conjuntos de resultados?
decir que tengo un conjunto de resultados (sólo uno en cada columna):
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'
Solución
Para realizar resultado1 - result2, puede unirse con resultado1 result2, y sólo los elementos de salida que existen en 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 fija sustracción .
Ver también: versión archive'd web de entrada de blog relevante.
Otros consejos
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
entonces las consultas anterior devolverá un conjunto vacío (no se mostrarán en result2
cosas que no están en result1
) para que no sean diferencia de conjuntos, pero pueden ser útiles también ( probablemente es más eficiente que la combinación externa).