含CASE的SQL语句逻辑错误排查:WHERE子句条件设置问题
问题分析与解决方案
核心错误点
- 连续等号语法错误:你写的
team_home = team_away=?是无效SQL语法,SQL不支持这种连续判断的写法。你实际想表达的是「team_home列的值等于变量值」,正确写法应为team_home = ?。 - CASE在WHERE中的逻辑误用:WHERE子句中CASE需要返回布尔值(TRUE/FALSE)或NULL,你的写法返回的是条件表达式,逻辑无法正确筛选行,且NULL会被WHERE判定为不满足条件。
需求匹配的正确SQL
根据你的需求(current_round=1时,变量值在team_away列则返回对应数据,在team_home列则返回NULL),分两种场景提供方案:
方案1:仅返回变量值在team_away列的行
如果你的目标是只保留符合current_round=1且team_away等于变量值的行,直接用WHERE条件筛选即可:
SELECT team_home, team_away, score_home, score_away FROM Results WHERE current_round = 1 AND team_away = ? LIMIT 1;
示例验证:当变量值为United时,会返回Liverpool, United, 3, 0这一行;若变量值是Liverpool(仅存在于team_home列),则无返回结果(等价于返回NULL行的需求)。
方案2:变量在team_home列时返回全NULL行
如果需要明确返回全NULL值的行(而非无结果),可以在SELECT子句中用CASE修改列值:
SELECT CASE WHEN team_home = ? THEN NULL ELSE team_home END AS team_home, CASE WHEN team_home = ? THEN NULL ELSE team_away END AS team_away, CASE WHEN team_home = ? THEN NULL ELSE score_home END AS score_home, CASE WHEN team_home = ? THEN NULL ELSE score_away END AS score_away FROM Results WHERE current_round = 1 AND (team_home = ? OR team_away = ?) LIMIT 1;
示例验证:当变量值为Liverpool时,会返回NULL, NULL, NULL, NULL;变量值为United时,返回正常数据行。
内容的提问来源于stack exchange,提问作者Evangelos Dellas
相关产品推荐
相关产品推荐

