SQL итерационный цикл, чтобы увидеть, работает ли сотрудник над всеми проектами - PullRequest
0 голосов
/ 28 февраля 2019

Запрос, который я должен сформировать, должен выполнить следующую задачу:

Retrieve the names of all employees who work on every project.

В настоящее время у меня есть три таблицы.Таблицы Employee, works_on и project.Цель выполнения этого запроса - получить каждый идентификатор проекта из таблицы проекта, сравнить его с идентификатором проекта в таблице works_on.Когда есть совпадение, он получает SSN и имена из таблицы сотрудников.Я сформировал следующий запрос:

SELECT e.Fname, e.Minit, e.Lname, p.Pname 
FROM EMPLOYEE e, PROJECT p, WORKS_ON w 
WHERE p.Pnumber=w.Pno AND w.Essn=e.Ssn

Но это выводит всех сотрудников, работающих над каждым проектом, а не всех сотрудников, работающих над КАЖДЫМ проектом.Есть ли способ перебрать список результатов запроса SELECT Pnumber FROM PROJECT?

Я действительно надеюсь, что сформулировал этот вопрос для вашего понимания.

1 Ответ

0 голосов
/ 28 февраля 2019

Также вам не нужно PROJECT, достаточно WORKS_ON.

HAVING фильтрует результаты после GROUP BY.

* GROUP BY e.Ssn означает, чтоCOUNT(*) в HAVING на сотрудника.JOIN ON WORKS_ON отображает пользователя на PROJECT, давая счет.

Используйте синтаксис JOIN table tbl ON .. = tbl.id JOIN - его легче читать.

SELECT e.Fname, e.Minit, e.Lname
FROM EMPLOYEE e
JOIN WORKS_ON w
  ON w.Essn=e.Ssn
GROUP BY e.Ssn
HAVING COUNT(*) = (SELECT COUNT(*) FROM PROJECTS)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...