Задача подзапроса SQL - PullRequest
       3

Задача подзапроса SQL

0 голосов
/ 12 октября 2018

Я пытаюсь решить следующую задачу.

Следующее определение данных определяет иерархию сотрудников организации.

Сотрудник является менеджером, если у любого другого сотрудника есть свой managerIdустановить для первых сотрудников id.Сотрудник, который является менеджером, может также иметь или не иметь менеджера.

TABLE employees   
 id INTEGER NOT NULL PRIMARY KEY
 managerId INTEGER REFERENCES employees(id)   
 name VARCHAR(30) NOT NULL

Напишите запрос, который выбирает имена сотрудников, которые не являются менеджерами.

Я пытался:

SELECT name FROM employees where id NOT IN (SELECT managerId FROM employees)

который не дает желаемого результата.Что не так?

Ответы [ 2 ]

0 голосов
/ 12 октября 2018

Добавление ManagerID не равно нулю в качестве условия где, оно предотвращает возвращение нулей и путаницу предполагаемого использования NOT IN.

SELECT name
FROM employees
where id NOT IN (
    SELECT managerId FROM employees where managerId is not null
)
0 голосов
/ 12 октября 2018

NOT IN не будет работать, если подзапрос вернет null:

Итак, я бы использовал NOT EXISTS вместо NOT IN:

SELECT e.name 
FROM employees e
WHERE NOT EXISTS (SELECT 1 FROM employees ee WHERE ee.managerId = e.id);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...