Сравнить две таблицы SQL и вернуть отсутствующие идентификаторы?

#mysql #sql #except

#mysql #sql #кроме

Вопрос:

У меня есть две простые таблицы: (здесь только столбец «id»)

таблица1:

 id
1
2
3
4
  

таблица2:

 id
2
4
  

sql-запрос должен сравнить две таблицы на предмет отсутствия «id» в table2 и вернуть:
1,3

есть идеи? 🙂 TY

Комментарии:

1. Пока что все ответы показывают только то, какие идентификаторы в table1 отсутствуют в table2. Есть ли у вас какая-либо потребность в запросе, который вернул бы все те в table2, которые отсутствуют и в column1?

2. привет, Пол, мне нужен только один способ.

3. Ключевое EXCEPT слово . MySQL не поддерживает эту операцию, но ее использование в поиске вернет множество результатов для доработки и дополнительных подходов. (Этот вопрос возникает время от времени.)

Ответ №1:

Есть несколько способов скинуть эту кошку:

 SELECT    table1.ID
FROM      table1
WHERE     table1.ID NOT IN(SELECT table2.ID FROM table2)
  

Или вы могли бы использовать левое внешнее соединение:

 SELECT          table1.ID
FROM            table1
LEFT OUTER JOIN table2 ON table1.ID = table2.ID
WHERE           table2.ID IS NULL
  

Комментарии:

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

Ответ №2:

 select t1.*
from table1 t1
left outer join table2 t2 on t1.id = t2.id
where t2.id is null
  

Комментарии:

1. @Raihan Потому что ЛЕВЫЙ ВНЕШНИЙ элемент может присоединяться к «no rows» из T2 для данного T1 (и это основа для этого подхода). Отсутствующие строки — это такие строки, которые есть … отсутствует 🙂

Ответ №3:

Попробуйте это:

 SELECT    table1.id
FROM      table1
WHERE     table1.id NOT IN(SELECT table2.id FROM table2)