我应该形成的查询必须完成以下任务:
Retrieve the names of all employees who work on every project.
我目前有三张 table 。 Employee、works_on 和项目表。完成此查询的目标是从项目表中获取每个项目 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
但这会输出在每个项目上工作的所有员工,而不是在每个项目上工作的所有员工。是否有某种方法可以迭代查询 SELECT Pnumber FROM PROJECT
的结果列表?
我真的希望我清楚地表达了这个问题以便您理解。
最佳答案
此外,您不需要 PROJECT
,WORKS_ON
就足够了。
HAVING
过滤 GROUP BY
之后的结果。
GROUP BY e.Ssn
表示 HAVING
中的 COUNT(*)
是针对每个员工的。 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)
关于mysql - SQL 迭代循环查看员工是否参与所有项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54918092/