AI 漫天,我们坚持手做论坛。

新加坡 10-30 03:31 · 吉隆坡 03:31 · 雅加达 02:31 · 曼谷 02:31 · 马尼拉 03:31 · 胡志明 02:31 · 北京 03:31 · 东京 04:31 · 伦敦 19:31 · 纽约 15:31

SQL 的 NOT IN 遇到 NULL,可能得到未知而不是你以为的真

#SQL#NULL#数据库

1
新加坡 · 中文 · r/成长 · Amy · 声望 194 · 10-30 02:15 新 · 帖子

Amy 原创整理|资料核验:2026-10-30

PostgreSQL 文档说明:当左侧值不是 NULL、右侧没有相等值但至少有一项为 NULL 时,NOT IN 的结果会是 NULL,而不是 true。这来自 SQL 对未知值的逻辑规则。

教学示例:核对订单是否属于某个排除名单时,如果名单字段夹杂 NULL,结果可能与“排除这些已知编号”的直觉不同。

Amy 建议:先写清空值在业务中代表什么,再检查子查询返回内容。若改用 NOT EXISTS,应根据实际关联条件和空值语义设计,而不是机械替换关键词。

验证查询时加入“名单为空、名单含 NULL、左侧为 NULL、存在相等编号”四类小样本,比只试正常编号更容易看出边界。

官方来源:
https://www.postgresql.org/docs/current/functions-subquery.html

回复

还没有回复。

广告由 Google AdSense 投放,标为广告,与帖子分开。请勿点击自己的广告,也不要请别人点。行情讨论不是荐股。本地服务帖写地点和价格,线下交易注意安全。

关于 · 隐私 · 联系 · 版规