2015-06-04 1 views
1

Я новичок в программировании, и я учу себя 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, классы;
Таблица Студент имеет столбцы: stno (номер студента);
Таблица содержит столбцы: section_ID, инструктор;

ответ

3

Это не работает, потому что часть, которую вы пытаетесь дать псевдоним 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'