无法在复杂查询中实现ORDER BY子句

时间:2013-04-13 20:06:48

标签: mysql sql sqlite

我试图实现这个question的答案。答案确实有效,但我发现我错过了为ORDER BY表中的order列实现qrgame_place子句(我已经检查过列真的存在)。但我无法让它发挥作用。这就是我的问题所在。这有效:

sql = '''SELECT P.id, (TP.id IS NOT NULL) AS done
FROM qrgame_place P
LEFT OUTER JOIN qrgame_team_places TP
ON P.id = TP.place_id AND TP.team_id = %s
WHERE P.game_id = %s
'''

但这不会:

sql = '''SELECT P.id, (TP.id IS NOT NULL) AS done
FROM qrgame_place P
LEFT OUTER JOIN qrgame_team_places TP
ON P.id = TP.place_id AND TP.team_id = %s
WHERE P.game_id = %s
ORDER BY P.order ASC
'''

我试图更改ORDER BY的位置,但它无济于事。

Django在模板中给出的错误是:

Exception Type:     DatabaseError
Exception Value:    near "order": syntax error

我不了解SQL语言?

3 个答案:

答案 0 :(得分:0)

订单不在SELECT中,因此无法按顺序排序。

将其添加到输出列表

sql = '''SELECT P.id, (TP.id IS NOT NULL) AS done, P.order
FROM qrgame_place P
LEFT OUTER JOIN qrgame_team_places TP
ON P.id = TP.place_id AND TP.team_id = %s
WHERE P.game_id = %s
ORDER BY P.order ASC
'''

或者通过其他列进行排序,例如id或已完成

答案 1 :(得分:0)

我应该在(doh)之前捕获的问题是order当然是SQL的保留关键字,即使我写了P.order也在sqlite中触发了SYNTAX ERROR,我不知道我认为生产服务器上的MySQL会给我带来任何问题(?)。但这似乎有效:

sql = '''SELECT P.id, (TP.id IS NOT NULL) AS done, P.`order` as ord
FROM qrgame_place P
LEFT OUTER JOIN qrgame_team_places TP
ON P.id = TP.place_id AND TP.team_id = %s
WHERE P.game_id = %s
ORDER BY ord
'''

观察查询第一行order周围的特殊字符。我可以(我相信)选择不选择P.order,只需在ORDER BY行上调用它。但是我听其他的激光器,只是把它包括在内。

MySQL和SQLite就是这样。不确定其他DB:s。

答案 2 :(得分:-1)

ORDER BY对输出进行排序。您尝试排序的字段不在输出中,因此该语句无效。