SQL使用CASE WHEN创建比赛结果表语法错误排查
SQL语法错误定位
你的建表语句共有4处会直接导致执行失败的问题:
- 字段分隔符缺失:
away_team_goal字段和后续CASE逻辑之间没有加逗号,SQL解析器会认为字段列表未正常分隔 - CASE表达式语法混用:你写的
CASE winner是「简单CASE表达式」的写法(要求后面跟WHEN 常量值 THEN 结果的结构),但后续写的是布尔条件判断,属于「搜索型CASE表达式」的用法,两种写法不能混写;搜索型CASE直接以CASE开头即可,判断结果需要通过AS winner指定字段名 - 非法符号残留:代码里
[ELSE 'Tie']的方括号是语法文档里标记可选参数的符号,实际执行的SQL中不能保留这对方括号 - DROP语句容错缺失:直接执行
DROP TABLE results时,如果results表之前不存在,会直接抛出表不存在的错误中断执行
修正后可直接运行的代码
DROP TABLE IF EXISTS results; CREATE TABLE results AS SELECT match_api_id, season, Country.name AS country_name, League.name AS league_name, stage, Match.home_team_api_id, Match.away_team_api_id, home_team_goal, away_team_goal, CASE WHEN home_team_goal > away_team_goal THEN 'Home Wins' WHEN away_team_goal > home_team_goal THEN 'Away Wins' ELSE 'Tie' END AS winner FROM Match INNER JOIN Country ON Match.country_id = Country.id INNER JOIN League ON Match.league_id = League.id; SELECT * FROM results;
补充优化说明:给关联后的国家名、联赛名字段加了独立别名,避免两个字段重名都叫name,后续查询时无法区分。
内容的提问来源于stack exchange,提问作者Jose Luis Estrada
相关产品推荐
相关产品推荐

