SQL小贴式: 用NOT EXISTS 而不是 NOT IN !!!

SQL小贴式: 用NOT EXISTS 而不是 NOT IN !!!

当使用NOT IN进行过滤时, 比如NOT IN xxx 时, 如果 xxx 中有NULL值时, 就会一行也不返回 !

在 SQL 中,NOT IN 子查询遇到 NULL 值时会产生意外行为,主要因为 SQL 使用三值逻辑(TRUE、FALSE、UNKNOWN),而不是二值逻辑.
SQL 比较(如 =, IN)涉及 NULL 时,结果可能是 UNKNOWN(未知)。
而WHERE 子句只接受 TRUE 的行;UNKNOWN 或 FALSE 的行会被排除。

NOT IN 的内部逻辑:x NOT IN (a, b, NULL) 等价于 x != a AND x != b AND x != NULL。
如果 x != NULL 为 UNKNOWN,整个表达式为 UNKNOWN,导致行被排除。

所以一定要用 NOT EXISTS 替代 NOT IN:最稳健,避免 NULL 问题。

https://www.codebonobo.tech/post/38#SQL小贴式: 用NOT EXISTS 而不是 NOT IN !!!

posted @ 2025-09-21 17:32  酱_油  阅读(10)  评论(0)    收藏  举报