MySQL: разница двух наборов результатов
Как я могу получить заданное различие двух наборов результатов?
Скажем, у меня есть набор результатов (по одному столбцу в каждом):
result1:
'a'
'b'
'c'
result2:
'b'
'c'
Я хочу минус то, что находится в result1 по результату2: result1 - result2, так что он равен:
difference of result1 - result2:
'a'
Ответы
Ответ 1
Чтобы выполнить результат1 - результат2, вы можете объединить результат1 с результатом2 и выводить только те элементы, которые существуют в результате1. Например:
SELECT DISTINCT result1.column
FROM result1 LEFT JOIN result2 ON result1.column = result2.column
WHERE result2.column IS NULL
Обратите внимание, что это не установленное различие, и не будет выводить элементы в result2, которые не существуют в result1. Это установлено вычитание.
Смотрите также: Веб-архив, версия соответствующего сообщения в блоге.
Ответ 2
Если вы хотите, чтобы объекты в result1
не находились в result2
, а что:
SELECT distinct result1
FROM t1
WHERE result1 NOT IN (select distinct result2 from t2);
Или:
SELECT distinct result
from t1 t
where NOT EXISTS (select 1 from t2 where result2 = t.result1)
ПРИМЕЧАНИЕ. Если result1
является подмножеством result2
, то указанные выше запросы возвращают пустой набор (они не будут показывать вам вещи в result2
, которые не находятся в result1
), поэтому они не установлены разница, но может быть полезна и (возможно, более эффективна, чем внешнее соединение).