MySQL: Разница двух наборов результатов
-
01-10-2019 - |
Вопрос
Как я могу получить разницу на множестве двух результатов?
Скажем, у меня есть набор результатов (только один столбец в каждом):
result1:
'a'
'b'
'c'
result2:
'b'
'c'
Я хочу минус, что в результате 1 по результатам2: Результат1 - Результат2 Так что это равно:
difference of result1 - result2:
'a'
Решение
Для выполнения результата1 - Результат2, вы можете присоединиться к результатам1 с результатом 2 и только выходные элементы, которые существуют в результате1. Например:
SELECT DISTINCT result1.column
FROM result1 LEFT JOIN result2 ON result1.column = result2.column
WHERE result2.column IS NULL
Обратите внимание, что не набор разница, и не выводят элементы в результате2, которые не существуют в результате1. Это установлено вычитание.
Смотрите также: Веб-архив версия соответствующего блога.
Другие советы
Если вы хотите вещей в 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
) Итак, они не устанавливают разницу, но могут быть полезны тоже (вероятно, это более эффективно, чем внешнее соединение).