关系代数中等效除法的SQL查询

时间:2014-11-17 03:20:39

标签: sql oracle10g relational-algebra

以下是我的表格,

人员(枚举,etitle,ENAME), PK:枚举

有(枚举,ANUM), PK:(枚举,ANUM), FK1:有(枚举) - >人员(枚举), FK2:有(ANUM) - >面积(ANUM)

区(ANUM,aname), PK:ANUM

问题:

专注于每个医疗领域的工作人员(enum,ename,etitle)。

我尝试了以下内容,

我知道这个查询的关系代数表达式是

划分(员工加入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)

但是没有返回任何行。我确保有一名工作人员专门负责每个领域。

我认为应该做些什么:

必须从所有区域中减去每个工作人员的区域。如果存在具有所有医疗区域的工作人员,则减法将返回空集并且不存在将满足。然后我们必须为特定的工作人员检索枚举,ename,etitle。

注意:

这是我的作业。我非常努力地发帖了。

1 个答案:

答案 0 :(得分: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. 检查此数字是否等于整个区域数