#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)