Как исправить этот код SQL, чтобы дать имена учеников и их оценки, которые получили лучшие оценки, чем самые высокие оценки по серому в классах, преподаваемых KEEN - PullRequest
0 голосов
/ 28 апреля 2019

У меня есть 4 таблицы: класс, студент, преподавательский состав и класс.Я хочу, чтобы SQL приводил имена учеников и их оценки, которые получили лучшие оценки, чем самые высокие оценки от GREY в классах, преподаваемых 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: недопустимый реляционный оператор

Любая помощь в том, как?

1 Ответ

0 голосов
/ 28 апреля 2019

Последний 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'
                );  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...