Проблемы с пониманием логики. Сотрудники, которые зарабатывают больше, чем менеджер. - PullRequest
0 голосов
/ 17 мая 2018

Не могли бы вы помочь мне понять, почему этот запрос не работает для решения проблемы ниже: выберите a.name в качестве 'Employee' из сотрудника a сотрудника объединения b для a.id = b.managerId и a.salary> b.salary

Это решение работает, но я не понимаю, почему мы должны присоединиться к a.managerId = b.Id: выберите a.name в качестве 'Employee' из сотрудника a сотрудника объединения b для a.id = b.managerId и a.salary> b.salary

Не могли бы вы помочь мне понять.

Вот проблема: Таблица Employee содержит всех сотрудников, включая их менеджеров. У каждого сотрудника есть идентификатор, а также столбец для идентификатора менеджера.

| Id | Имя | Зарплата | ManagerId |

| 1 | Джо | 70000 | 3 |

| 2 | Генри | 80000 | 4 |

| 3 | Сэм | 60000 | NULL |

| 4 | Макс | 90000 | NULL |

С учетом таблицы Employee напишите SQL-запрос, который определяет сотрудников, которые зарабатывают больше, чем их менеджеры. Для приведенной выше таблицы Джо - единственный сотрудник, который зарабатывает больше, чем его менеджер.

| Сотрудник |

| Джо |

1 Ответ

0 голосов
/ 17 мая 2018

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

select emp.name
from employee emp
join employee manager on emp.managerId = manager.id
where emp.salary > manager.salary

После объединения у вас будут записи, которые выглядят примерно так, если вы запустите команду select * вместовыбрав один столбец:

emp.id, emp.name, emp.salary, emp.managerid, manager.id, manager.name, manager.salary, manager.managerid

Как только вы это сделаете, предложение where будет довольно простым.

...