mysql - SQL 迭代循环查看员工是否参与所有项目

标签 mysql sql

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

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 的结果列表?

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

最佳答案

此外,您不需要 PROJECTWORKS_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/

相关文章:

php - 使用 group_concat 的复杂 SQL 查询

mysql - Codeigniter 事件记录 - 插入点列

sql - 在 SQL Server 中查找重复的县名

mysql - 如何授予对mysql的root访问权限?

php - 主键基于另一个键递增

mysql - 删除外键然后删除记录并最后将外键设置回来是一个好的做法吗?

php - 更新比较 4 个变量的表?

java - 无法将参数添加到准备好的语句中。 JAVA。 Spring MVC

从多个表中删除时MySQL查询问题

sql - 从 SQL 列中选择特定字符