我需要一个循环还是他们在这里更容易的方式

时间:2013-09-10 17:32:24

标签: mysql sql self-join

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

ID | Name | Salary | Department_id | Boss_id

因此,无论老板与否,所有员工都会被列入其中。如果某人不是老板,那么他们对Boss_id的值将为NULL。

目的是要弄清楚是否有任何员工的收入高于他们各自的老板,而且我的意思是来自同一个部门。

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

2 个答案:

答案 0 :(得分: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。

答案 1 :(得分: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