嵌套不存在

时间:2019-05-02 03:55:54

标签: mysql sql

enter image description here

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

最初,当我检查此查询时,我以为答案是D。但是,我想逐步了解D为何正确的逻辑,并且我希望通过任何能够确认我是否有效的更正/详尽说明,以我为D辩护。

最里面的子查询包含所有项目的组合,以及在2015年对其进行过处理的特定开发人员。

那个子查询之外的子查询是相反的:2015年不存在与开发者相关的项目。

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

1 个答案:

答案 0 :(得分:1)

考虑到查询的文字,它是:

  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年从事所有项目的开发人员。