首页 > 解决方案 > 嵌套不存在

问题描述

在此处输入图像描述

Project(pid,name,startYear)
Developer(did,name,hireYear)
WorksOn(pid,did,year)

最初,当我检查此查询时,我认为答案是 D。但是,我想通过我的逻辑来解释为什么 D 是正确的,并且我将不胜感激任何可以确认我的理由是否有效的更正/详细说明对于 D。

最里面的子查询包含所有项目的组合,以及 2015 年从事这些项目的特定开发人员。

该子查询之外的子查询与此相反:2015 年不存在与开发人员相关的项目。

最外面的查询选择了所有工作的开发人员,因为 where 子句在 2015 年没有项目。或者你可以认为没有项目的反面是所有项目。

标签: mysqlsql

解决方案


考虑到单词的查询,它是:

  1. 寻找开发者
    SELECT X.did FROM Developer X
  2. 没有项目的地方
    WHERE NOT EXISTS (SELECT * FROM Projects Z ...
  3. 他们在 2015 年没有工作
    WHERE NOT EXISTS (SELECT * FROM WorksOn Y WHERE X.did = Y.did AND Y.pid = Z.pid AND Y.year = 2015)

因此,结果是开发人员在 2015 年参与了所有项目。


推荐阅读