SQL 迭代循环,查看员工是否在所有项目上工作

Sai*_*eri 2 mysql sql

我应该形成的查询必须完成以下任务:

Retrieve the names of all employees who work on every project.
Run Code Online (Sandbox Code Playgroud)

我目前有三张桌子。Employee、works_on 和 project 表。完成此查询的目标是从项目表中获取每个项目 ID,将其与works_on 表中的项目 ID 进行比较。当匹配时,它将获取 SSN 并从员工表中获取姓名。我形成的查询是这样的:

SELECT e.Fname, e.Minit, e.Lname, p.Pname 
FROM EMPLOYEE e, PROJECT p, WORKS_ON w 
WHERE p.Pnumber=w.Pno AND w.Essn=e.Ssn
Run Code Online (Sandbox Code Playgroud)

但这会输出参与每个项目的所有员工,而不是参与每个项目的所有员工。有什么方法可以遍历查询的结果列表SELECT Pnumber FROM PROJECT吗?

我真的希望我清楚地表达了这个问题,以便您理解。

dan*_*ack 5

你也不需要PROJECTWORKS_ON就足够了。

HAVING过滤后的结果GROUP BY

GROUP BY e.Ssn装置,所述COUNT(*)HAVING每雇员。将JOIN ON WORKS_ON用户映射到PROJECT计数。

使用JOIN table tbl ON .. = tbl.id JOIN语法 - 更容易阅读。

SELECT e.Fname, e.Minit, e.Lname
FROM EMPLOYEE e
JOIN WORKS_ON w
  ON w.Essn=e.Ssn
GROUP BY e.Ssn
HAVING COUNT(*) = (SELECT COUNT(*) FROM PROJECTS)
Run Code Online (Sandbox Code Playgroud)