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.
WHERE idcode NOT IN (...)
is equivalent toWHERE idcode <> ALL (...)
- user330315