Project(pid,name,startYear)
Developer(did,name,hireYear)
WorksOn(pid,did,year)
最初,当我检查此查询时,我以为答案是D。但是,我想逐步了解D为何正确的逻辑,并且我希望通过任何能够确认我是否有效的更正/详尽说明,以我为D辩护。
最里面的子查询包含所有项目的组合,以及在2015年对其进行过处理的特定开发人员。
那个子查询之外的子查询是相反的:2015年不存在与开发者相关的项目。
最外面的查询选择所有工作的开发人员,因为where子句在2015年不存在没有项目的项目。 或者您可以认为没有项目的反面就是所有项目。
答案 0 :(得分:1)
考虑到查询的文字,它是:
SELECT X.did FROM Developer X
WHERE NOT EXISTS (SELECT * FROM Projects Z ...
WHERE NOT EXISTS (SELECT * FROM WorksOn Y WHERE X.did = Y.did AND Y.pid = Z.pid AND Y.year = 2015)
因此,结果是在2015年从事所有项目的开发人员。