我有4张桌子,分别是班级,学生,教师和年级。 我希望SQL列出在KEEN教授的课程中,其成绩比“灰色”最高分高的学生及其年级。
这是我所做的事情的一个示例
SELECT S_NAME, GRADE
FROM GRADE1
WHERE GRADE >(SELECT GRADE FROM GRADE1 G
INNER JOIN CLASS1 C ON G.C_NAME=C.C_NAME
INNER JOIN aggarwal.FACULTY1 F ON F.F_NAME
WHERE G.S_NAME='GRAY' AND F.F_NAME='KEEN');
第6行出现错误:
ORA-00920:关系运算符无效
有什么帮助吗?
答案 0 :(得分:0)
最后一个INNER JOIN
是罪魁祸首;它的ON
子句未包含应有的所有内容-您要加入F.F_NAME
来做什么?
此外,还有其他一些反对意见:
子查询错过了MAX
函数;一般而言,您应注意它返回单个值,否则将得到TOO-MANY-ROWS
,除非您应用ALL
(或ANY
),例如
where r.grade > any (select g.grade from grade1 g ...)
您为什么在表名之前加上它的所有者,例如:aggarwal.FACULTY1
?并非所有表都属于同一模式?如果是这样,请将其删除(或为了保持一致性,也将其与所有其他表一起使用)。
最后,您的查询可能如下所示:
select r.s_name, r.grade
from grade1 r --> missing alias(es)
where r.grade > (select max(g.grade) --> missing MAX
from grade1 g
inner join class1 c on g.c_name = c.c_name
inner join faculty1 f on f.f_name = ... --> missing value here
where g.s_name = 'GRAY'
and f.f_name = 'KEEN'
);