假设我有三张桌子:
Employees:
PID NAME WAGE
---------- -------------------- ----------
10234 Able 8
11567 Baker 9
3289 George 10
88331 Alice 11
Employee_made:
PID SID QUANTITY HOURS
---------- ---------- ---------- ----------
10234 11 24 3
10234 12 6 1
10234 13 24 1
10234 21 6 1
10234 23 4 1
10234 31 48 6
11567 23 4 1
11567 31 1 1
88331 11 6 1
Sandwich:
SID PRICE NAME
---------- ---------- ------------------------------
12 2 hamburger on wheat
13 2 cheese burger
21 1.75 fish burger on rye
23 1.75 fish burger on wheat
31 3 veggie burger on wheat
11 2 hamburger on rye
我需要列出制作了所有不同三明治的所有员工,并显示他们的名字和PID。到目前为止我得到的是:
Select E.name, E.pid
From employees E, employee_made EM, sandwich S
Where E.pid = EM.pid
它告诉我来自employees和employee_made表的匹配PID。在我不确定的地方是如何显示已经制作了所有三明治的员工,因此不将任何SID与employee_made表匹配,而是将所有SID与所有这些匹配。
答案 0 :(得分:2)
首先,从不在FROM
子句中使用逗号。 始终使用正确的JOIN
语法。
您可以通过计算员工制作的三明治数量然后与三明治总数进行比较来解决这个问题:
select em.pid
from employee_made em
group by em.pid
having count(distinct em.sid) = (select count(*) from sandwich);
这给出了员工的pid
。我会告诉你如何引入员工姓名(提示:in
,exists
和join
都可以使用。