SQL Деление на 4 столбца / кортежа (Выбрать все ...) - PullRequest
0 голосов
/ 17 июня 2020

Цель:

У меня есть следующие реляционные схемы (первичный ключ жирный ):

  • больница ( больничный_ид )

  • пациент ( больничный_ид , пациент_ид , доктор_ид)

    • ссылки на внешний ключ (больничный_ид, доктор_ид) доктор (больничный_ид, доктор_ид)
  • персонал ( больничный_ид, эид, имя)

    • ссылки на внешний ключ (больничный_ид) больница
  • доктор ( больничный_ид, доктор )

    • внешний ключ (больничный_ид, докторид) ссылки на персонал (больничный_ид, эид )

Мне нужно написать запрос

"Создайте представление, как найти имена врачей, которые заботятся о все пациенты в каждой (своей) больнице . "

То, что я пробовал до сих пор:

Я думаю использовать эту формулу :

SELECT * FROM R 
WHERE x not in ( SELECT x FROM (
(SELECT x , y FROM (select y from S ) as p cross join 
(select distinct x from R) as sp)
EXCEPT
(SELECT x , y FROM R) ) AS r );

с кортежем x = (doctor_id, hospital_id) y = (patient_id, hospital_id) путем создания представлений:

create view doctor_patient as
  select (d.doctor_id, d.hospital_id), (p.patient_id, p.hospital_id)
  from doctor_employee d, patient p
  where d.doctor_id = p.doctor_id
  and d.hospital_id = p.hospital_id;

create view patient_hospital as
  select (p.patient_id, p.hospital_id)
  from patient p;

Однако это явно не работает с ошибкой:

ERROR:  column "row" specified more than once

ERROR:  column "row" has pseudo-type record

Кто-нибудь знает, как выполнить sh эту задачу? Пожалуйста, дайте мне знать, если для этого поста требуются дополнительные уточнения. Заранее спасибо!

1 Ответ

0 голосов
/ 17 июня 2020

Создайте представление как (из) найти имена врачей, которые заботятся обо всех пациентах в каждой (своей) больнице.

Я позволю вам сделать часть имени . Но вы можете получить пары врач / больница, используя агрегирование:

select hospital_id, doctor_id
from patient p
group by hospital_id, doctor_id
having count(distinct patient_id) = (select count(distinct p2.patient_id)
                                     from patient p2
                                     where p2.hospital_id = p.hospital_id and
                                           p2.doctor_id = p.doctor_id
                                    );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...