Возвращаемые значения внутреннего соединения

У меня есть такой запрос,

      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);

В приведенном выше запросе, читаемом простым языком, говорится, что нужно вернуть любое имя сотрудника (один раз), для которого мы можем найти хотя бы одну задачу в стол.

Другие вопросы по тегам