我正在尝试使用CASE语句,但我一直收到语法错误。我已经关注docs但我似乎无法摆脱这种语法错误: 查询:
SELECT students.firstname, students.lastname, students.tnumber, grades.tnumber
FROM students, grades
CASE WHEN grades.tnumber=students.tnumber AND grades.courseid='CSC2110' AND (grades.Grade='A' OR grades.Grade='B' OR grades.Grade='C')THEN 'YES' ELSE 'NO' END
错误:
error executing query. MySQL: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'CASE WHEN grades.tnumber=students.tnumber AND grades.courseid='CSC2110' A' at line 1
忽略表并选择语句。我更关心的是检查我的CASE语句的语法以及它为什么会抛出错误。
答案 0 :(得分:2)
您还不能完全清楚CASE
表达式要执行的操作,但它似乎应位于SELECT
列表中。我还将CASE
表达式中奇怪出现的连接条件移动到ON
子句。
SELECT students.firstname,
students.lastname,
students.tnumber,
grades.tnumber,
CASE WHEN grades.courseid = 'CSC2110' AND
(grades.Grade='A' OR grades.Grade='B' OR grades.Grade='C')
THEN 'YES' ELSE 'NO' END AS someColumn
FROM students
INNER JOIN grades
ON grades.tnumber = students.tnumber
答案 1 :(得分:0)
您还可以使用proper
和readable
语法尝试此配对:
SELECT
s.tnumber, s.firstname, s.lastname,
IF (
-- condition
grades.Grade = 'A' OR grades.Grade = 'B' OR grades.Grade = 'C',
-- if true
'YES',
-- else
'NO'
) `status`
FROM
students s
INNER JOIN grades g ON g.tnumber = s.tnumber
WHERE grades.courseid = 'CSC2110';
注意强>
您可以在我添加WHERE
部分的位置轻松地将此代码重新用于其他courseid
在呈现适合人们的数据时,我还添加了suggested
格式,始终将id
代码放在前面
还有一点是,通过使用proper
格式,它可以帮助您和其他人understand
您的代码