3

我有一个名为 employees 的表,其中包含列。

ID | Name | Salary | Department_id | Boss_id

因此,无论他们是否是老板,所有员工都在此列出。如果某人不是老板,那么他们的 Boss_id 值为 NULL。

目的是弄清楚是否有任何员工比他们各自的老板赚得更多,我的意思是,来自同一部门的员工。

我一直在努力解决这个问题,我不确定是否需要一个循环来遍历所有部门,或者是否有更简单的方法。

4

2 回答 2

4

不,你不需要循环。

如果你想比较一个员工的薪水和他的“老板”的薪水,你可以使用 JOIN 操作。

仅列出薪水高于老板的员工:

SELECT e.*
  FROM employee e
  JOIN employee b
    ON b.id = e.boss_id
   AND e.salary > b.salary

如果要列出所有员工,只需添加一列表明他们的薪水是否高于老板的薪水,以及老板的薪水:

SELECT e.*
     , IF(e.salary>b.salary,'Y','N') AS higher_salary_than_boss
     , b.salary AS boss_salary
  FROM employee e
  LEFT
  JOIN employee b
    ON b.id = e.boss_id
 ORDER
    BY e.id

我看不出“部门”是如何真正发挥作用的。

如果你想比较一个员工的薪水和他老板的老板,你可以在员工表中再添加一个 LEFT JOIN。

于 2013-09-10T17:39:18.810 回答
2
SELECT t1.ID, t1.Name 
FROM table1 t1 
INNER JOIN table2 t2
ON t1.ID = t2.Boss_id
AND t1.Salary > t2. Salary
AND t1.Department_id = t2.Department_id 
于 2013-09-10T17:38:07.320 回答