我有一个名为 employees 的表,其中包含这些列。
ID | Name | Salary | Department_id | Boss_id
所以所有员工都列在这里,无论他们是否是老板。如果某人不是老板,那么他们的 Boss_id 值将为 NULL。
目的是弄清楚是否有任何员工比他们各自的老板挣得更多,我的意思是来自同一部门。
我一直在努力解决这个问题,但我不确定我是否需要一个循环遍历所有部门,或者是否有更简单的方法。
最佳答案
不,你不需要循环。
如果你想比较一个员工的薪水和他“老板”的薪水,你可以使用 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。
关于mysql - 我需要一个循环还是他们在这里更简单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18725379/