0

我试图实现这个问题的答案。答案确实有效,但我发现我错过了为表中的列实现子句ORDER BY(我已经检查过该列是否确实存在)。但我无法让它工作。这就是我的问题归结为。这有效:orderqrgame_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 语言有什么不了解的地方?

4

3 回答 3

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 或 done

于 2013-04-13T20:09:01.057 回答
0

问题,我应该在(doh)之前发现自己order当然是保留关键字 i SQL 并且即使我写了也会在 sqlite 中触发 SYNTAX ERROR P.order,我认为生产服务器上的 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。

于 2013-04-13T20:50:09.290 回答
-1

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

于 2013-04-13T20:09:45.340 回答