2014-11-17 2 views
0

Ниже приведены мои таблицы,SQL Query для эквивалентного разделения в реляционной алгебре

персонала (перечисление, etitle, ENAME), рк: перечисление

Имеет (перечисление, Anum), рк: (перечисление , Anum), fk1: Имеет (перечисление) -> Сотрудники (перечисление), ФК2: Имеет (Anum) -> Площадь (Anum)

Площадь (Anum, aname), рк: Anum

Pro blem:

Персонал (enum, ename, etitle), который специализируется на каждой медицинской области.

Я попытался следующие,

Я знаю, что выражение отношения алгебры для этого запроса будет

разрыв (Staff присоединиться к Has) по (площадь проекта по Anum)

Мой SQL запросов является следующим:

select S.enum 
from Staff S 
where not exists 
(select A.anum from Area A) 
minus 
(select H.anum 
from Has H,Staff S1 
where H.enum = S1.enum) 

Но строки не возвращаются. Я удостоверился, что есть один сотрудник, который специализируется на каждой области.

То, что я думаю, что должно быть сделано:

зоны каждого сотрудника должны быть также вычитают из всех областей. Если есть сотрудник со всеми медицинскими областями, то вычитание вернет нулевой набор и не будет выполнено. Затем нам нужно вернуть enum, ename, etitle для конкретного сотрудника.

Примечание:

Это мое домашнее задание. Я отправляю это, пытаясь очень усердно.

ответ

0
select * from Staff 
where enum in (
    select enum from (
     select enum, count(distinct anum) as number_of areas 
     from Has group by enum 
    ) where number_of areas = (select count(*) from Area) 
); 
  1. Для каждого перечисления подсчитать количество уникальных областей.
  2. Убедитесь, что это число равно целому числу областей
Смежные вопросы