2017-01-05 3 views
2

У меня есть несколько условий IN с подзапросами.MySQL несколько условий IN для подзапроса с той же таблицей

SELECT 
    S.name, 
    S.email 
FROM something S 
WHERE 
    1 NOT IN (SELECT id FROM tags WHERE somethingId = S.id) 
    AND 2 NOT IN (SELECT id FROM tags WHERE somethingId = S.id) 
    AND 3 NOT IN (SELECT id FROM tags WHERE somethingId = S.id) 

Возможно, есть лучшие решения? Что-то вроде:

(1, 2, 3) NOT IN (SELECT id FROM tags WHERE somethingId = S.id) 
+1

Вместо этого НЕ СУЩЕСТВУЕТ. (Который также является нулевым.) – jarlh

+1

Вы должны предпочитать 'JOIN' или' EXISTS() ', поскольку они во многих ситуациях быстрее и гибче. – DanFromGermany

ответ

4

Вместо этого переписать в использование NOT EXISTS. Т.е. возвращения из S, если нет строки в тегах с somethingId равно s.id и идентификатор 1, 2 или 3.

SELECT 
    S.name, 
    S.email 
FROM something S 
WHERE NOT EXISTS (SELECT 1 FROM tags WHERE id in (1, 2, 3) and somethingId = S.id) 

Также NOT EXISTS является «нуль-сейф». (NOT IN (select returning a null) не будет возвращать никакие строки вообще.)

+0

Я идиот ... Я мог подумать об этом сам ... :(Спасибо. Я приму свой ответ, как только смогу. –

Смежные вопросы