数据库:筛选出Employee工资高于Manager工资的人员(Mysql)

原题目是这样的:

±—±------±-------±----------+
| Id | Name | Salary | ManagerId |
±—±------±-------±----------+
| 1 | Joe | 70000 | 3 |
| 2 | Henry | 80000 | 4 |
| 3 | Sam | 60000 | NULL |
| 4 | Max | 90000 | NULL |
±—±------±-------±----------+
给了一个Employee表,表里面的字段有Id,Name,Salary和ManagerId,其中ManagerId是自反Id来找到对应的工资Salary,那么问题是如何通过建立SQL查询语句找到员工的Salary高于Manager的Salary的名字,如果是上表的内容,则通过查询语句输出的结果应给是如下:
±---------+
| Employee |
±---------+
| Joe |
±---------+

我的思路是:通过原Employee表查询出对应的Manager的Salary,再将查询出的结果和原表Employee进行连接得出新表,在新表的基础上,直接利用工资比较关系就可以得出原结果。

我的查询语句是这样的:

 select distinct (Name) as "Employee" from ((
(select t1.Id,t1.Salary as Managersalary
 from Employee as t1, Employee as t2 
 where  t1.Id= t2.ManagerId)  as f
 right join  Employee on Employee.ManagerId= f.Id) 
    )  where Salary>Managersalary AND Managersalary is not null

t1和t2表仍然是原来的Employee,这里是为了区分两个表的不同作用,防止混淆,t1是为了匹配原Id,t2是为了匹配ManagerId,得出的结果是筛选出对应的Manager的Salary,也就是把Manager的工资表单独筛选出来,叫做f.然后将f和原来的Employee表做右连接,这时候得出的表就可以存在连个字段Salary和ManageSalary了。
运行结果是和答案一致的,然而提交的时候,却发现其他实例是错误的。恳求有人指点。
在网上找到一个网友的查询语句是对的:

select a.Name as 'Employee' from Employee a left join Employee b
 on a.ManagerId=b.Id
where a.Salary > b.Salary and a.ManagerId is not null

他的看起来更简单。

你可能感兴趣的:(数据库)