【问题标题】:I am getting a "Identifier identifier" error when executing a SQL query执行 SQL 查询时出现“标识符标识符”错误
【发布时间】:2020-11-16 04:55:50
【问题描述】:

我不确定如何解决涉及到 registration.student_id 的错误

SELECT std_name, course#
FROM student
INNER JOIN (SELECT min(grade) FROM enrollment GROUP BY grade)
ON enrollment.student_id = student.student_id;

在 Oracle SQL Developer 中出现以下错误:

ORA-00904: "ENROLLMENT"."STUDENT_ID": invalid identifier
00904. 00000 -  "%s: invalid identifier"
*Cause:    
*Action:
Error at Line: 22 Column: 4

【问题讨论】:

  • 子查询中没有student_id。错误似乎很明显。
  • 而且没有别名enrollment ...

标签: sql oracle join subquery min


【解决方案1】:

子查询不返回student_id,所以你不能在外层查询中引用它。您似乎想要每个学生的最低成绩,因此您还需要修复子查询的group by 子句。

我建议:

SELECT s.std_name, e.min_grade
FROM student s
INNER JOIN (
    SELECT student_id, min(grade) min_grade 
    FROM enrollment 
    GROUP BY student_id
) e ON e.student_id = s.student_id;

您的查询的其他修复:

  • 您需要在子查询中为min(grade) 加上别名,以便在外部查询中引用它

  • 子查询本身需要一个别名

请注意,您可以使用相关子查询获得相同的结果 - 这允许根本没有注册的学生,而您的原始查询没有,除非您将 INNER JOIN 转换为 LEFT JOIN

SELECT 
    s.std_name, 
    (
        SELECT min(e.grade) 
        FROM enrollment e 
        WHERE e.student_id = s.student_id
    ) min_grade
FROM student s

【讨论】:

  • 非常感谢!第一个做到了。我还应该从注册表中获取另一列。我该怎么办?主要目标是只返回每个学生注册的所有课程中最低成绩的 std_name 和 course_num。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-30
  • 1970-01-01
  • 2021-10-13
  • 1970-01-01
相关资源
最近更新 更多