我得到了一个“答案”;标识符;执行SQL查询时出错

我得到了一个“答案”;标识符;执行SQL查询时出错,sql,oracle,join,subquery,min,Sql,Oracle,Join,Subquery,Min,我不确定如何修复引用registration.student\u 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"

我不确定如何修复引用registration.student\u 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

子查询不返回
学生id
,因此不能在外部查询中引用它。似乎您想要每个学生的最低分数,因此您还需要修复子查询的
groupby
子句

我建议:

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)
    ,以便在外部查询中引用它

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

请注意,使用相关子查询可以得到相同的结果-这允许学生完全没有注册,而原始查询没有注册,除非将
内部联接
转换为
左联接

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

子查询中没有
学生id
。错误似乎很清楚。而且没有别名
注册
…非常感谢!第一个做到了。我还应该从注册表中获取另一列。我该怎么做呢?主要目标是只返回每个学生注册的所有班级中最低年级的std_名称和课程编号。