Laravel Query Builder嵌套CASE语句异常求助:非AO01值未返回NO
Laravel DB::raw嵌套CASE语句问题修复
问题原因
你的代码存在两个关键问题:
- 字段名未加反引号:SQL中包含数字和特殊组合的字段名需要用反引号
包裹,否则会被错误解析为算术表达式(比如921959X45X591会被当成921959 * 45 * 591`),导致条件判断完全偏离预期。 - 字符串引号错误:使用了HTML转义的
",在SQL执行时会被当作字符串的一部分(或被解析为标识符,取决于SQL模式),导致= "AO01"的匹配逻辑失效。
修正后的代码
可以简化嵌套CASE为多条件CASE结构,逻辑更清晰且避免错误:
DB::raw('(CASE WHEN `lime_survey_921959`.`921959X45X591` IS NULL THEN "YES" WHEN `lime_survey_921959`.`921959X45X590` = "AO01" THEN "YES" ELSE "NO" END) AS HasActivity')
或者使用单引号包裹字符串(更符合SQL标准写法):
DB::raw("(CASE WHEN `lime_survey_921959`.`921959X45X591` IS NULL THEN 'YES' WHEN `lime_survey_921959`.`921959X45X590` = 'AO01' THEN 'YES' ELSE 'NO' END) AS HasActivity")
逻辑验证
修正后的代码完全匹配你的需求:
- 当
921959X45X591为Null时,直接返回YES - 当
921959X45X591非Null时,判断921959X45X590是否等于AO01,是则返回YES,否则返回NO
内容的提问来源于stack exchange,提问作者Anônimo Man
相关产品推荐
相关产品推荐

