【发布时间】:2015-03-06 21:08:06
【问题描述】:
我正在尝试为 Moodle v2.7 数据库(使用 PostgreSQL 9.3)构建所有用户及其特定课程分数的报告。我收到以下错误,并查看了产生的问题和其他示例同样的错误,但它们都没有为我的具体问题提供答案。不确定我在这里忽略了什么。
错误:对表“mdl_user”的 FROM 子句条目的引用无效
SELECT
mdl_user.lastname as LastName,
mdl_user.firstname as FirstName,
Grr.finalgrade as Grade,
REPLACE(Grr.itemname,'COURSE: ','') as Course,
TO_CHAR(TO_TIMESTAMP(Grr.timemodified), 'MM/DD/YYYY') as Completed
FROM
public.mdl_user LEFT JOIN (
SELECT
mdl_grade_grades.finalgrade,
mdl_grade_items.itemname,
mdl_grade_grades.userid,
mdl_grade_grades.timemodified
FROM
public.mdl_grade_items LEFT JOIN public.mdl_grade_grades
ON public.mdl_grade_items.id = public.mdl_grade_grades.itemid
WHERE
mdl_grade_grades.userid = mdl_user.id AND
mdl_grade_items.itemname LIKE 'COURSE: Lock Out Tag Out: ECP'
) AS Grr ON Grr.userid = public.mdl_user.id
ORDER BY
mdl_user.lastname,
mdl_user.firstname
【问题讨论】:
-
您需要将
ID括在引号中吗?它显示为 postgresql postgresql.org/docs/current/static/sql-keywords-appendix.html 的关键字列表,也许用引号括起来会消除这个问题。 作为一般规则,如果您对包含任何列出的关键字作为标识符的命令产生虚假的解析器错误,您应该尝试引用标识符以查看问题是否消失。 -
@xQbert,我认为这不是问题,因为其他更简单的查询以相同的方式使用
ID字段。但如果它是一个关键字,那么它应该像你所说的那样被引用。我会尝试引用它,如果它修复它会回复你。 -
timemodified的实际数据类型是什么? -
@xQbert:带引号的标识符是导致悲伤的常见原因,但这里似乎并非如此。
标签: sql postgresql join left-join moodle