2017-01-05 12 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

代わりにNOT EXISTSを実行してください。 (これはヌルにも安全です) – jarlh

+1

多くの状況でより速く柔軟性があるので、 'JOIN'や' EXISTS() 'を優先するべきです。 – DanFromGermany

答えて

4

代わりにNOT EXISTSを書き換えてください。 Sからの戻りすなわち何行がsomethingIdとタグに存在しないs.idすることに等しく、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は「NULLセーフ」です。 (NOT IN (select returning a null)は行をまったく返しません)

+0

私はばかです...私は自分のことを考えていました:(ありがとう、私はできるだけ早くあなたの答えを受け入れるでしょう。 –

関連する問題