Нужна помощь в написании запроса Oracle SQL - PullRequest
0 голосов
/ 25 мая 2019

написать запрос, чтобы отобразить идентификатор персонала, код оплаты, идентификатор специальности, название специальности, дату обращения, номер пациента и срок оплаты, будет рассчитываться с использованием даты обращения + 21

SELECT
    staffid, 
    chrgcode,
    dateconsulted,
    patientno,
    (dateconsulted + 21) "Due Date"
FROM
    staff_speciality,
    staff,
    speciality,
    consultation;

ВЫБРАТЬstaffid, chrgcode, dateconsulting, Patientno, (dateconsulting + 21) "Срок> Дата"
*
ОШИБКА в строке 1:
ORA-00918: столбец неопределенно определен
Подключен к:
OracleБаза данных 12c Standard Edition, выпуск 12.1.0.2.0 - 64-разрядная версия
SQL> описать специальность
Имя Нет?Тип


УКАЗАНО НЕ НУЛЕВОЙ CHAR (4)
УКАЗАТЬ VARCHAR2 (25)
УКАЗАТЬ VARCHAR2 (100)
SQL> описать staffid
ОШИБКА:
ORA-04043: объект staffid не существует
SQL> описать staff
Имя Нет?Тип


STAFFID NOT NULL CHAR (2)
VARCHAR ФИО2 (20)
VARCHAR LASTNAME2 (20)
VARCHAR РОЛЬ2 (15)
CHAR ГЕНДЕРА (1)
DATEJOINED DATE
DATELEFT DATE SQL> описать ошибку specialspeciality:
ORA-04043: объект staffspeciality не существует
SQL> описать staff_speciality
Name Null?Тип


STAFFID NOT NULL CHAR (2)
SPECID NOT NULL CHAR (4)
DATEQUALIFIED NOT NULL DATE
ДЕЙСТВИТЕЛЬНАЯ ДАТА
ДЕТАЛИ VARCHAR2 (100)
SQL> опиши консультацию Name Null?Введите


CHRGCODE NOT NULL CHAR (7) STAFFID NOT NULL CHAR (2) DATECONSULTED NOT NULL DATE STARTTIME NUMBER (4,2)
PATIENTNO CHAR (7)
SQL> SELECT staffid, chrgcode, dateconsulting, Patientno, (dateconsulting + 21) "Дата исполнения"
2 FROM staff_speciality, персонал, специальность, консультация;
SELECT staffid, chrgcode, dateconsulting, Patientno, (dateconsulting + 21) "Срок выполнения"
*
ОШИБКА в строке 1:
ORA-00918: столбец неопределенно определен

1 Ответ

0 голосов
/ 25 мая 2019

Вы можете создать такой запрос с синтаксисом ANSI-92

SELECT s.staffid, chrgcode, dateconsulted, patientno, (dateconsulted + 21) "Due Date"
  FROM staff_speciality ss 
  JOIN staff s ON s.staffid = ss.staffid
  JOIN speciality sp ON sp.specid = ss.specid
  JOIN consultation c ON c.staffid = s.staffid

, где особенно важно псевдоним столбца staffid в списке выбора (вы также можете явно указать псевдоним каждого столбца), поскольку три таблицыиметь этот общий столбец, и если он не указан, Oracle не может знать, какой столбец таблицы выбран без псевдонима, и ORA-00918: column ambiguously defined возникает из-за этой ошибки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...