CREATE VIEW Использование нескольких таблиц

Привет, пытаюсь создать представление в оракуле. Однако я получаю ошибки в своем коде, которые я не могу понять, как решить. В настоящее время я пытаюсь создать представление, которое показывает менеджеров, их имя и фамилию, клинику, которой они также назначены. PK клиники и FK адреса клиники. Все адреса хранятся в этой таблице (да, я знаю, что это не стандартно, но я так делаю) Поэтому я также хочу показать адрес клиники, в которой они работают

Конечно, это включает два оператора WHERE, которые я не знаю, как реализовать. Первый - это where STAFFJOBNAME "MANAGER"

а во-вторых, где ADDRESSNO совпадает в обеих таблицах

CREATE VIEW MANAGER AS
    SELECT STAFF.staffno,STAFF.staffFirstName,STAFF.staffLastName,CLINIC.clinicNo, CLINIC.addressNo
    FROM STAFF,CLINIC
    WHERE addressNo = 
    (
        SELECT addressNo, addressStreet, addressCity, addressCounty, addressPostcode, addressTelephone,
        FROM ADDRESS,
        INNER JOIN CLINIC,
        ON ADDRESS.addressNo = CLINIC.addressNo
    ) AND STAFF.staffJobName = 'MANAGER';

У меня тоже есть эта версия. Так что я не уверен, что ближе к правильному.

CREATE VIEW MANAGER
(
    AS
    SELECT STAFF.staffno,STAFF.staffFirstName,STAFF.staffLastName,CLINIC.clinicNo, CLINIC.addressNo, ADDRESS.addressNo, ADDRESS.addressStreet, ADDRESS.addressCity, ADDRESS.addressCounty, ADDRESS.addressPostcode, ADDRESS.addressTelephone,
    FROM ADDRESS, STAFF,
    INNER JOIN CLINIC,
    ON ADDRESS.addressNo = CLINIC.addressNo
);

person Gideon Sassoon    schedule 18.03.2014    source источник
comment
выполняется ли запрос в первом примере?   -  person KrazzyNefarious    schedule 19.03.2014
comment
Попытка создать первое представление MANAGER вызовет ORA-00913: too many values.   -  person AnBisw    schedule 19.03.2014
comment
У вашей второй версии есть несколько проблем: у вас не может быть ( и ) вокруг определения представления, и у вас слишком много запятых (,).   -  person Jeffrey Kemp    schedule 19.03.2014


Ответы (2)


CREATE VIEW MANAGERANDCLINIC    AS
    SELECT STAFF.staffno,STAFF.staffFirstName,STAFF.staffLastName,CLINIC.clinicNo, ADDRESS.addressStreet, ADDRESS.addressCity, ADDRESS.addressCounty, ADDRESS.addressPostcode, ADDRESS.addressTelephone
    FROM STAFF,CLINIC, ADDRESS
    WHERE (CLINIC.CLINICMANAGERNO = STAFF.STAFFNO) AND
    (CLINIC.ADDRESSNO = ADDRESS.ADDRESSNO)
    ORDER BY CLINIC.CLINICNO;

В итоге нашел ответ на свой вопрос

person Gideon Sassoon    schedule 20.03.2014

Вы получаете слишком много ошибок значений для вашего первого представления, потому что во внутреннем запросе вы возвращаете много столбцов, но в предложении where у вас есть только один столбец.

Также во втором коде измените, как показано ниже.

 CREATE VIEW MANAGER

AS
SELECT STAFF.staffno,STAFF.staffFirstName,STAFF.staffLastName,CLINIC.clinicNo, CLINIC.addressNo, ADDRESS.addressNo, ADDRESS.addressStreet, ADDRESS.addressCity, ADDRESS.addressCounty, ADDRESS.addressPostcode, ADDRESS.addressTelephone,
FROM ADDRESS, STAFF
INNER JOIN CLINIC
ON ADDRESS.addressNo = CLINIC.addressNo;
person Kerri Williams    schedule 19.03.2014