Подтвердить что ты не робот

MySQL: разница двух наборов результатов

Как я могу получить заданное различие двух наборов результатов?

Скажем, у меня есть набор результатов (по одному столбцу в каждом):

result1:
'a'
'b'
'c'

result2:
'b'
'c'

Я хочу минус то, что находится в result1 по результату2: result1 - result2, так что он равен:

 difference of result1 - result2:
 'a'
4b9b3361

Ответ 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), поэтому они не установлены разница, но может быть полезна и (возможно, более эффективна, чем внешнее соединение).