Oracle SQL中CASE WHEN IS NULL写法1为何无法正常工作?
为什么Oracle SQL中第一种CASE写法无法正常工作?
你遇到的问题核心是CASE表达式的两种语法差异,以及SQL中NULL的特殊判断规则:
两种写法的本质区别
第一种写法(简单CASE表达式):
CASE s.COURSE_SCHEDULED_ID WHEN IS NULL THEN 'false' ELSE 'true' END AS "Is scheduled?"这种写法属于简单CASE,语法逻辑是将
CASE后的列(s.COURSE_SCHEDULED_ID)与WHEN后的内容做等值比较(=)。但SQL中NULL不能用=判断——任何值和NULL用=比较的结果都是UNKNOWN(既非真也非假),而且WHEN IS NULL本身就不符合简单CASE的语法规范,所以这个分支永远不会被触发,最终所有行都会返回'true',无法正确识别NULL值。第二种写法(搜索CASE表达式):
CASE WHEN s.COURSE_SCHEDULED_ID IS NULL THEN 'false' ELSE 'true' END AS "Is scheduled?"这种是搜索CASE,它直接执行
WHEN后的条件表达式(s.COURSE_SCHEDULED_ID IS NULL),这是SQL中判断NULL的标准方式,IS NULL可以准确识别列值是否为NULL,因此能正确返回预期结果。
总结
如果要判断NULL,必须使用搜索CASE表达式的形式(WHEN 列 IS NULL),不能用简单CASE的等值比较逻辑——因为简单CASE无法处理NULL的特殊特性。
内容的提问来源于stack exchange,提问作者Adolis Pali
相关产品推荐
相关产品推荐

