PostgreSQL中!~*运算符对NULL值不生效的原因咨询
为什么NULL记录会被
WHERE tasks.description !~* 'test'过滤 在SQL的逻辑判断体系里,NULL代表“未知值”,它和任何值进行比较(包括!~*这类正则匹配操作)的结果既不是TRUE也不是FALSE,而是UNKNOWN。
WHERE子句的核心规则是:仅保留判断结果为TRUE的数据行,结果为UNKNOWN或FALSE的行都会被过滤。
当tasks.description为NULL时,tasks.description !~* 'test'这个表达式的计算结果是UNKNOWN,所以对应的记录会被WHERE子句排除,这就是你看到NULL记录被过滤的根本原因。
你后续修改的WHERE tasks.description !~* 'test' OR tasks.description IS NULL是正确的解决方案,因为tasks.description IS NULL会明确返回TRUE,让NULL记录满足查询条件被保留。
内容的提问来源于stack exchange,提问作者Hanna
相关产品推荐
相关产品推荐

