Postgres中CASE WHEN判断数值与NULL不等未返回TRUE问题及写法咨询
PostgreSQL NULL比较逻辑与业务判断方案解答
1 为什么CASE WHEN 1 != null未返回TRUE?
在PostgreSQL的逻辑体系中,NULL代表未知值,而非空字符串、0这类确定的有效值。所有标准比较运算符(=、!=、<、>等)和NULL做运算时,返回结果既不是TRUE也不是FALSE,而是UNKNOWN(未知)。CASE WHEN只会在条件判断结果明确为TRUE时执行对应分支,UNKNOWN会被判定为不满足条件,因此无论是1 = NULL还是1 != NULL,最终都会走到ELSE分支返回FALSE。
2 是否必须加OR 字段 IS NULL的判断?
你给出的写法是完全正确可运行的,能准确覆盖「答案不一致」和「用户未提交答案(user_answered_id为NULL)」两种错误场景。
如果想简化写法,可以使用PostgreSQL专门用于NULL值等值比对的运算符IS DISTINCT FROM,它会把NULL视为确定的可比对值,自动处理NULL的判断逻辑,无需额外加IS NULL判断。你可以直接把逻辑简化为:
user_answered_id IS DISTINCT FROM expected_answer_id AS user_incorrect_tally
该表达式返回的本身就是布尔值,和你原有的CASE WHEN写法效果完全一致。
内容的提问来源于stack exchange,提问作者user3871
相关产品推荐
相关产品推荐

