我有一个名为 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。
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