首页 > 解决方案 > 执行 SQL 查询时出现“标识符标识符”错误

问题描述

我不确定如何修复涉及到 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

标签: sqloraclejoinsubquerymin

解决方案


子查询不返回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 JOINLEFT JOIN

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

推荐阅读