PostgreSQL中NULL值无法被NOT IN条件匹配的原因咨询
为什么NOT IN查询无法返回NULL值?
这是SQL三值逻辑的特性导致的:
- SQL中的NULL代表“未知值”,而非具体数据,任何与NULL的比较结果都会是
UNKNOWN(既不是TRUE也不是FALSE) - 当执行
name NOT IN ('amtf')时,对于name为NULL的行,实际等价于判断NULL != 'amtf',这个比较的结果是UNKNOWN - WHERE子句只会保留比较结果为
TRUE的行,UNKNOWN的行会被直接过滤,因此NULL值不会出现在查询结果中
如果需要在结果中包含NULL值,可以用以下两种方法:
-- 方法1:添加OR条件显式判断NULL SELECT * FROM test WHERE name NOT IN ('amtf') OR name IS NULL; -- 方法2:使用NOT EXISTS替代NOT IN SELECT * FROM test WHERE NOT EXISTS (SELECT 1 WHERE test.name = 'amtf');
内容的提问来源于stack exchange,提问作者Zuojia Jiang
相关产品推荐
相关产品推荐

