mySQL不断收到错误的情况

时间:2016-10-26 23:34:31

标签: mysql syntax-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

忽略表并选择语句。我更关心的是检查我的CASE语句的语法以及它为什么会抛出错误。

2 个答案:

答案 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)

您还可以使用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您的代码