Возвращаемые значения внутреннего соединения
У меня есть такой запрос,
select name
from employee
inner join task on employee.id = task.employee_id
order by name asc
Таблицы выглядят так:
наемный рабочий
id name
1 Emily
2 Sam
3 AI
4 Joe
5 Daniel
6 John
задача
task_id employee_id
A123 1
D456 3
A122 1
Я полагал, что исходный запрос выше приведет к:
Al
Emily
Но на самом деле это:
Al
Emily
Emily
Я думал, что он просто вернет Эмили один раз, поскольку внутреннее соединение возвращает оба значения в обеих таблицах, но разве Эмили не появляется только один раз в таблице сотрудников? Я не понимаю, почему он возвращает Эмили дважды, хотя он дважды указан в таблице задач?
Спасибо
1 ответ
У Эмили две задачи, поэтому ее запись имени дублируется в объединении по одному разу для каждого совпадения. Я мог бы использовать существующую логику, чтобы получить здесь желаемый результат:
SELECT e.name
FROM employee e
WHERE EXISTS (SELECT 1 FROM task t WHERE t.employee_id = e.id);
В приведенном выше запросе, читаемом простым языком, говорится, что нужно вернуть любое имя сотрудника (один раз), для которого мы можем найти хотя бы одну задачу в