SELECT something
FROM someTable
WHERE idcode NOT IN (SELECT ids FROM tmpIdTable)
リスト内の任意の値に対してチェックします。
ただし、NOT IN は NULL 許容ではありません。サブクエリが NULL を含む一連の値を返した場合、レコードはまったく返されません。 (これは、内部的に NOT IN が idcode <> 'foo' AND idcode <> 'bar' AND idcode <> NULL
に最適化されているためです。 NULL と比較すると UNKNOWN が返され、式全体が TRUE にならないため、常に失敗します。)
より優れた NULL トレラントなバリアントは次のようになります:
SELECT something
FROM someTable
WHERE NOT EXISTS (SELECT ids FROM tmpIdTable WHERE ids = someTable.idcode)
編集:私は当初、これを想定していました:
SELECT something
FROM someTable
WHERE idcode <> (SELECT ids FROM tmpIdTable)
最初の値のみに対してチェックします。この仮定は、少なくとも SQL Server では間違っていることがわかりました。実際に彼のエラーが発生します:
Msg 512, Level 16, State 1, Line 1 Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.