麻烦理解逻辑。收入超过经理人的员工。

时间:2018-05-17 03:15:37

标签: sql teradata

您能帮助我理解为什么此查询不适用于以下问题: 选择a.name为'员工'来自员工的加入员工b,a.id = b.managerId和a.salary> b.salary

此解决方案有效,但我不明白为什么我们应该加入a.managerId = b.Id: 选择a.name为'员工'来自员工的加入员工b,a.id = b.managerId和a.salary> b.salary

你能帮我理解吗?

问题在于: Employee表包含所有员工,包括他们的经理。每个员工都有一个Id,并且还有一个经理Id列。

| Id |名称|薪水| ManagerId |

| 1 |乔| 70000 | 3 |

| 2 |亨利| 80000 | 4 |

| 3 |山姆| 60000 |空|

| 4 |最大| 90000 |空|

根据Employee表,编写一个SQL查询,查找收入高于其经理的员工。对于上表,Joe是唯一一位收入超过其经理的员工。

|员工|

|乔|

1 个答案:

答案 0 :(得分:0)

如果您使用不同的表别名,可能更容易理解发生了什么。

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子句非常简单。