0

我的数据库中有 2 个表。

  1. 我部门的员工表。该表集中存储。我无权在此表中管理
emp_id 姓名 职位 dept_1 dept_2 dept_3
000010 emp1 名称1 导向器 首席执行官 人力资源
000012 emp2 名称2 员工 首席执行官 人力资源
000013 emp2 名称2 导向器 首席执行官 人力资源 招聘
000014 emp2 名称2 员工 首席执行官 人力资源 招聘
000015 emp2 名称2 员工 首席执行官 人力资源 招聘
.. .. .. .. ..
.. .. .. .. ..
000200 emp2 名称2 总导演 首席执行官
  1. 部门表。这是我为展示我的部门而创建的表格。
dept_id 部门级别 部门名称 部门订单
1 1 首席执行官 1
2 2 人力资源 2
2 3 招聘 3
2 3 训练 4
2 2 销售 5
2 3 销售计划 6
2 3 销售营销 7

我想知道是哪个部门的员工?

我尝试使用命令:

SELECT *
FROM table1
INNER table2 ON (table2.dept_name = table1.dept_1 OR table2.dept_name = table1.dept_2 OR table2.dept_name = table1.dept_3)

但这不是我想要的答案。

我想

emp_id 姓名 职位 部门级别 部门名称 部门订单
000010 emp1 名称1 导向器 2 人力资源 2
000012 emp2 名称2 员工 2 人力资源 2
000013 emp2 名称2 导向器 3 招聘 3
000200 emp2 名称2 总导演 1 首席执行官 1

我该怎么办?

PS对不起我的英语

4

1 回答 1

0
WITH cte AS ( SELECT *, MAX(d.dept_level) OVER (PARTITION BY e.emp_id) maxlevel
              FROM employees e
              JOIN department d ON d.dept_name IN (e.dept_1, e.dept_2, e.dept_3) )
SELECT * 
FROM cte 
WHERE dept_level = maxlevel
ORDER BY emp_id

对于 MySQL 5.7 / MariaDB 10.1 使用

SELECT *
FROM employees e
JOIN department d ON d.dept_name IN (e.dept_1, e.dept_2, e.dept_3)
JOIN ( SELECT e.emp_id,
              MAX(d.dept_level) maxlevel
       FROM employees e
       JOIN department d ON d.dept_name IN (e.dept_1, e.dept_2, e.dept_3)
       GROUP BY e.emp_id ) ed USING (emp_id)
WHERE d.dept_level = ed.maxlevel
ORDER BY emp_id

小提琴

于 2021-02-05T05:39:45.093 回答