SQL练习 - 似乎无法解决这个问题

时间:2017-11-23 21:04:44

标签: sql postgresql

我是手动编写SQL查询的新手,我有一个我似乎无法解决的练习。

我理解解决此问题所需的工具,但我无法提出解决方案。

你能帮助我理解如何以一种允许我将来解决类似练习的方式解决这个问题吗?

我有以下表格:

CREATE TABLE Employee (
  Eid SERIAL primary key,
  Ename character varying(30) NOT NULL,
  salary integer DEFAULT 0 NOT NULL
);

CREATE TABLE Project (
  Pid SERIAL primary key,
  Pname character varying(30) NOT NULL,
  requiredWorkers integer DEFAULT 0 NOT NULL
);

CREATE TABLE workson (
  Eid integer references Employee(eid),
  Pid integer references Project(pid),
  Primary Key (Eid,Pid)
);

练习:

有几个项目可能具有相同的名称(但不同的Pids)。归还 员工的工作,他们所从事的所有项目都准确 同名。只返回至少在一个项目上工作的员工。

1 个答案:

答案 0 :(得分:3)

您可以使用例如NOT EXISTS

select distinct w1.eid
from Project p1
join workson w1 on p1.pid = w1.pid
where not exists(
  select 1
  from Project p2
  join workson w2 on p2.pid = w2.pid
  where w1.eid = w2.eid and p2.pname != p1.pname
)

另一个解决方案是使用GROUP BYHAVING

select w.eid
from Project p
join workson w on p.pid = w.pid
group by w.eid
having count(distinct p.pname) = 1