mysql - 我需要一个循环还是他们在这里更简单

标签 mysql sql self-join

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

相关文章:

Mysql 到 Postgresql Rails PG::GroupingError: 错误:

php - SELECT * FROM table WHERE date BETWEEN 显示去年的数据,为什么?

mysql - 合并两个选择语句

MySQL 事件变量 - 将值复制到另一个表

sql - 如何从 SQL Server 中传递的参数中选择表名和列名?

sql - 自加入。内、外、左重要吗?

SQL 连接来识别组成员

mysql - 两个 SQL 表上的数据透视表,其中一个包含 5m+ 行?

php - 我的代码意外结束

mysql 从表中检索和操作当前行和上一行