Сравните две таблицы MySQL и выберите отдельные записи во второй - PullRequest
0 голосов
/ 01 ноября 2018

У меня есть две таблицы MySQL с одним столбцом в каждой. Я хочу выбрать записи во второй таблице, которая не существует в первой.

Я попробовал следующий запрос, но, похоже, не работает

SELECT column_name FROM `table_name_1` 
WHERE NOT EXISTS (SELECT column_name FROM `table_name_2`); 

Например: table_name_1

column 
111111111111
222222222222
333333333333
444444444444

table_name_2

column
222222222222
333333333333
555555555555
666666666666

Теперь я хочу получить только 55555555555 и 66666666666 записей в table_name_2.

Ответы [ 3 ]

0 голосов
/ 01 ноября 2018

Ваш запрос должен работать с этим. Проверка скрипки

SELECT DISTINCT column_name 
FROM   table_name_2 
WHERE  column_name NOT IN (SELECT column_name 
                           FROM   table_name_1); 
0 голосов
/ 01 ноября 2018

Так что нужны некоторые записи из второй таблицы.
Тогда вторая таблица должна быть во внешнем запросе.

Критерии (НЕ) EXISTS отличаются от (НЕ) IN.
При использовании EXISTS, связь между запросом в EXISTS и внешним запросом должна быть добавлена ​​в EXISTS.

SELECT DISTINCT column_name 
FROM `table_name_2` AS t2
WHERE NOT EXISTS (
     SELECT 1 
     FROM `table_name_1` AS t1
     WHERE t1.column_name = t2.column_name
); 

Тест SqlFiddle здесь

0 голосов
/ 01 ноября 2018

Вы можете просто Left Join из таблицы 2 в таблицу 1 и получить все эти уникальные значения, соответствующие которым нет совпадений в таблице 1 (t1.column_name is null)

Также, обратите внимание, что , для производительности вам понадобится Индекс по обоим столбцам в их соответствующих таблицах.

Попробуйте вместо этого следующее:

SELECT DISTINCT t2.column_name  
FROM table_name_2 AS t2 
LEFT JOIN table_name_1 AS t1 ON t1.column_name = t2.column_name 
WHERE t1.column_name IS NULL 

Обратите внимание , что если значения столбцов ограничены уникальностью (ограничение PK или Unique), или вам все равно, если в результате появятся повторяющиеся значения, вы можете удалить ключевое слово DISTINCT, используемое в запрос выше.


Результат:

| column_name  |
| ------------ |
| 555555555555 |
| 666666666666 |

Посмотреть на скрипку БД

...