SQL中CASE WHEN覆盖全对立条件却全返回NULL的原因
问题原因
SQL采用三值逻辑(TRUE/FALSE/UNKNOWN),任何值与NULL使用=、<>、!=这类普通比较运算符做判断时,返回结果永远是UNKNOWN,永远不会被判定为条件成立。
你写的两个CASE WHEN分支,第一个判断条件都是AIMS_Title <> null,这个条件无论AIMS_Title存储什么内容,都永远不会命中,直接导致后续所有判断逻辑都不会被执行,CASE语句没有匹配到任何成立的分支,就会默认返回NULL,这就是所有行SELECTED_Title字段全为NULL的根本原因。
判断字段是否为NULL只能使用IS NULL/IS NOT NULL专用语法,不能用普通比较符和NULL做运算。
修正方案
- 把所有和NULL做普通比较的写法替换为标准的NULL判断语法
- 你原有两个WHEN分支的返回值完全一致,不需要拆分重复判断,可以直接合并简化逻辑
修正后的完整SQL如下:
WITH cte AS ( SELECT Title DBUser_Title, GP_JobTitle GP_Title, DESC_ AIMS_Title FROM ScheduleTable ) SELECT *, CASE WHEN AIMS_Title = DBUser_Title THEN 'IsEqual' END AIMS_equals_DBUser, CASE WHEN AIMS_Title IS NOT NULL AND AIMS_Title = 'Lead XX' THEN AIMS_Title END SELECTED_Title FROM cte
补充说明
你之前写的AIMS_equals_DBUser字段能正常输出结果,是因为当两个字段相等时判断条件成立返回'IsEqual',不相等(包括任意一个字段为NULL)时条件不成立返回NULL,这个行为本身符合SQL三值逻辑的规则,只是SELECTED_Title字段的NULL判断写法错误才导致全量NULL的问题。
内容的提问来源于stack exchange,提问作者KWallace
相关产品推荐
相关产品推荐

