这个问题摘自《数据库系统基础》第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 )));
作者将解决方案解释为:
选择每个员工,以便不存在该员工未参与的由部门5控制的项目
我不明白第二个内部相关子查询如何与其他不相关子查询和外部查询相关联以给出正确的结果。
任何帮助都很感激。
5条答案
按热度按时间i7uq4tfw1#
请注意Except在MySQL中不起作用
mm5n2pyu2#
qxsslcnc3#
我不得不修改查询,以便找到拥有Smith正在从事的所有项目的所有员工。因此,请按照编写的代码重新格式化:
添加注解的行将返回将部门5的所有项目(1,2)分配给Smith的所有员工,如果从项目中删除项目3,则输出相同。因此CONFUSION是NOT EXISTS,即返回所有记录不正确部门中的每个项目都不匹配。
ih99xse14#
请尝试以下代码:
iklwldmw5#