Вложенный НЕ СУЩЕСТВУЕТ - PullRequest
0 голосов
/ 02 мая 2019

enter image description here

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

Первоначально, когда я изучал этот запрос, я думал, что ответ был D. Однако, я хотел бы пройтись по моей логике относительно того, почему Dявляется правильным, и я был бы признателен за любые исправления / уточнения, которые могли бы подтвердить, если я верен в своем обосновании D.

Внутренний самый подзапрос содержит комбинации всех проектов, а также конкретных разработчиков, которые работали над ними в2015.

Подзапрос, отличный от этого, является обратным к этому: в 2015 году не существует проектов с разработчиками, связанными с ними.

Самый внешний запрос выбирает разработчиков, которые работали над всеми, потому чтоВ предложении where НЕ СУЩЕСТВУЕТ ни одного проекта в 2015 году. Или вы можете думать, что противоположностью ни одного проекта не являются все проекты.

1 Ответ

1 голос
/ 02 мая 2019

С учетом запроса в словах, это:

  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 году.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...