sql - 当我们在语句中使用联接时,在选择语句中使用案例表达式时出错
问题描述
此代码不起作用并显示错误“未在预期的位置找到来自关键字”
select m.marks,
CASE
WHEN m.marks<65 then 'F'
WHEN m.marks>65 then 'P'
END m.grade
from student s INNER JOIN marks m ON s.id=m.id;
但这有效
select marks,
CASE
WHEN marks<65 then 'F'
WHEN marks>65 then 'P'
END grade
from marks
解决方案
m
是表的别名,marks
您在引用该表中的列时使用它。您将其应用于列别名:
END m.grade
它不属于的地方,所以 - 只在那个地方 - 删除m.
:
select m.marks,
CASE
WHEN m.marks<65 then 'F'
WHEN m.marks>65 then 'P'
END grade
from student s INNER JOIN marks m ON s.id=m.id;
正如@Gordon 在评论中指出的那样,您正在检查 >65 和 <65,因此正好65 的学生将不会获得 F 或 P - 他们的成绩将为空。你可能想要:
WHEN m.marks < 65 then 'F'
WHEN m.marks >= 65 then 'P'
或者
WHEN m.marks >= 65 then 'P'
ELSE 'F'
...虽然如果marks
为 null,第二个版本也将其视为 F,而第一个版本仍将返回 null。
推荐阅读
- javascript - 如何将多个数据上传到 Firebase 商店而不重复
- angular - Angular 通用生产构建过程
- excel - For...Next 以 Worksheets(i).ChartObjects 失败。有什么建议么?
- php - 调用未定义的方法 Goutte\Client::setClient()
- html - HTML5 是否允许标题(如 h1)内的块级元素(如 div)?
- google-cloud-platform - Google Cloud Vision:模型未导出
- rest - 创建一个没有冲突的 RESTful 动作
- node.js - 无法从“node_modules\@firebase\firestore\dist\rn\index.js”解析“./prebuilt.rn-f9cd27ba.js”
- typescript - 我无法通过 electron-main.dev.js/electron-main.js 的 tslint 问题构建类星体。项目设置后我从未编辑过这两个标准文件
- python - 使用 pickle 检索保存的对象时出错