數據庫:篩選出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

他的看起來更簡單。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章