代码之家  ›  专栏  ›  技术社区  ›  Drew Chapin

对表“mdl_user”的FROM子句项的引用无效

  •  1
  • Drew Chapin  · 技术社区  · 11 年前

    我正在尝试为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
    
    2 回复  |  直到 11 年前
        1
  •  4
  •   Community Mohan Dere    9 年前

    @avk是对的。但还有更多。适当简化的查询:

    SELECT u.lastname
         , u.firstname
         , g.finalgrade AS grade
         , right(i.itemname, -8) AS course
         , to_char(to_timestamp(g.timemodified), 'MM/DD/YYYY') AS completed
    FROM   public.mdl_user         u
    LEFT   JOIN
          (public.mdl_grade_items  i
      JOIN public.mdl_grade_grades g ON g.itemid = i.id
                                    AND i.itemname = 'COURSE: Lock Out Tag Out: ECP'
          ) ON g.userid = u.id
    ORDER  BY 1,2;
    
        2
  •  1
  •   Erwin Brandstetter    11 年前

    在子选择中 Grr ,删除 mdl_grade_grades.userid = mdl_user.id .
    这是导致错误的原因,它已加入 AS Grr ON Grr.user.id=public.mdl_user.id 不管怎样,这条线。

    推荐文章