【发布时间】:2016-07-31 03:38:59
【问题描述】:
我正在处理三个包含以下列的表格:
- students(name TEXT, Courseid INTEGER, score INTEGER) 例如:('TOM', 6120,85)
- courses(courseid INTEGER, name TEXT,classic TEXT) 例如:(6110, 'Science', 'LSB105')
- gradingscheme(letter TEXT, lower REAL, upper REAL) 例如:('A', 90, 100)
我正在尝试加入所有三个表,以便它包括根据学生表中的分数在 gradingscheme 表中指定的每个学生的字母等级。我在 Python 中使用 sqlite3 库。我写的sql语句如下:
SELECT s.name, s.courseid, c.name, c.classroom, s.score, CASE g.letter WHEN s.score BETWEEN g.upper AND g.lower
FROM students AS s, courses AS c, gradingscheme AS g
WHERE s.courseid=c.courseid
但是,我遇到了一个错误。最后两行报错如下:
WHERE s.courseid=c.courseid''')
sqlite3.OperationalError: “FROM”附近:语法错误
请帮忙
编辑代码:
SELECT s.name, s.courseid, c.name, c.classroom, s.score, g.letter
FROM students AS s
INNER JOIN courses AS c
ON s.courseid=c.courseid
INNER JOIN gradingscheme AS g
ON CASE g.letter WHEN s.score BETWEEN g.lower AND g.upper
现在我收到错误:
ON CASE g.letter WHEN s.score BETWEEN lower and upper''') sqlite3.OperationalError:靠近“上部”:语法错误
可能我不知道如何使用 CASE 语句进行条件连接
【问题讨论】:
-
学习使用正确的显式
JOIN语法。简单规则:从不在FROM子句中使用逗号。 -
谢谢戈登。我现在更改了代码并使用了 Inner Join。但是,我收到了如上面编辑过的问题所示的错误。我可能无法在这里弄清楚如何使用 case 语句。