mysql - 检索在部门编号 5 控制的所有项目中工作的每位员工的姓名

标签 mysql

本题摘自《数据库系统基础》第 6 版(Elmasri,Navathe)第 5 章查询 3b。作者回答这个问题的一种方法是使用存在量词:

SELECT Lname, Fname
FROM EMPLOYEE
WHERE NOT EXISTS ( SELECT *
                  FROM WORKS_ON B
                  WHERE ( B.Pno IN ( SELECT Pnumber
                                    FROM PROJECT
                                    WHERE Dnum=5 )
                  AND
                  NOT EXISTS ( SELECT *
                               FROM WORKS_ON C
                               WHERE C.Essn=Ssn
                               AND C.Pno=B.Pno )));

作者将解决方案解释为:

Select each employee such that there does not exist a project controlled by department 5 that the employee does not work on

我无法理解第二个内部相关子查询如何与另一个不相关子查询和外部查询相关以给出正确的结果。
感谢您的帮助。

最佳答案

SELECT fname, lname FROM employee
WHERE NOT EXISTS
(SELECT pnumber FROM project WHERE dnum=5
AND pnumber NOT IN
(SELECT pno FROM works_on WHERE ssn=essn));

请注意 Except 在 mysql 中不起作用

关于mysql - 检索在部门编号 5 控制的所有项目中工作的每位员工的姓名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24976538/

相关文章:

php - 您如何创建一个包含环绕常用代码的代码块的函数?

php - 如何通过php在mysql中插入特殊字符并显示在html页面上

php - 搜索和分页不起作用

mysql - 不可能在一个非常简单的订单查询中避免 'using filesort'

mysql - 根据 2 个条件选择行

php - 将 URL 中的页面标题转换为页面 id

mysql - Ruby on Rails - 数组中的数据库查询

php - 重命名上传文件,将新名称发布到数据库

Mysql Group By 使用列特定单个值

mysql - 如何在生产环境中更新数据库架构?