Новое в программировании: почему я не могу использовать псевдоним встроенного представления в Oracle SQL?

Я новичок в программировании, и я учу себя ORACLE SQL с учебником из дома. Мне было интересно, если кто-нибудь может дать мне объяснение, почему этот скрипт не работает. Я был в состоянии сделать это альтернативными способами и получить ответ, но я просто хочу понять основы того, почему я не могу использовать псевдоним для встроенного представления. Благодарю.

SELECT * FROM  
(  
(SELECT * FROM SECTION WHERE INSTRUCTOR='HERMANO') s  
JOIN Grade_report g  
ON s.section_ID=g.section_id
) v
JOIN Student Stu   
ON stu.stno=v.student_number

Возвращает: "Команда SQL не завершена должным образом"

Таблица Grade_report имеет столбцы: section_number, section_ID, Grades;
Таблица Student содержит столбцы: stno (номер студента);
Таблица Раздел имеет столбцы: section_ID, Инструктор;

1 ответ

Это не работает, потому что часть, которую вы пытаетесь дать псевдоним v неверный запрос:

(
  (SELECT *
  FROM SECTION
  WHERE INSTRUCTOR='HERMANO') s

  JOIN Grade_report g
    ON s.section_ID=g.section_id
) v

Вы можете сделать его действительным, добавив дополнительный выбор внутри этого фрагмента:

SELECT *
FROM
( SELECT * /* This is new */
  FROM
    (SELECT *
    FROM SECTION
    WHERE INSTRUCTOR='HERMANO') s
  JOIN Grade_report g
    ON s.section_ID=g.section_id
) v
JOIN Student Stu
  ON stu.stno=v.student_number

Или вы можете просто удалить этот псевдоним и иметь два объединения на одном уровне:

SELECT *
FROM
  (SELECT *
  FROM SECTION
  WHERE INSTRUCTOR='HERMANO') s
  JOIN Grade_report g
    ON s.section_ID=g.section_id
  JOIN Student Stu
    ON stu.stno=v.student_number

Что по сути так же, как:

SELECT *
FROM SECTION s
JOIN Grade_report g
  ON s.section_ID=g.section_id
JOIN Student Stu
  ON stu.stno=v.student_number
WHERE s.INSTRUCTOR='HERMANO'
Другие вопросы по тегам