CASE WHEN mySQL 不断出错

CASE WHEN mySQL keeps getting error

我正在尝试使用 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

忽略表格和select 语句。我更关心的是检查我的 CASE 语句的语法以及它抛出错误的原因。

不完全清楚您希望 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

您也可以尝试使用 properreadable 语法:

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 您的代码