SQL优先查employee_region 缺失则取department_region匹配记录
SQL查询获取员工关联区域数据(员工区域配置优先级高于部门配置)
核心规则
- 关联两张区域表:
employee_region(员工专属区域表)、department_region(部门通用区域表) employee_region关联条件为employee.id = employee_region.id,表内数据优先级高于department_region- 某区域在
employee_region无匹配记录时,默认取department_region中同区域的分值 - 预期返回2条结果:
- SOUTHWEST 8745829483:员工表有该区域配置,取员工表分值
- NORTHWEST 3125533132:员工表无该区域配置,取部门表分值
测试用表结构&数据
- EMPLOYEE(员工表)
| ID | DEPT_ID |
|---|---|
| 123 | 4a059d6a-b086-462b-a5b4-49a725a16c60 |
- EMPLOYEE_REGION(员工区域表)
| ID | REGION | SCORE |
|---|---|---|
| 123 | SOUTHWEST | 8745829483 |
- DEPARTMENT(部门表)
| ID | NAME | PHONE |
|---|---|---|
| 4a059d6a-b086-462b-a5b4-49a725a16c60 | SALES | 673-348-2928 |
- DEPARTMENT_REGION(部门区域表)
| ID | REGION | SCORE |
|---|---|---|
| 4a059d6a-b086-462b-a5b4-49a725a16c60 | SOUTHWEST | 1111111111 |
| 4a059d6a-b086-462b-a5b4-49a725a16c60 | NORTHWEST | 3125533132 |
实现SQL
实现逻辑:先拉取员工所属部门下的全部区域作为基础数据集,左连员工专属区域配置,用COALESCE优先取员工配置的非空分值。
SELECT dr.region, COALESCE(er.score, dr.score) AS score FROM employee e INNER JOIN department_region dr ON e.dept_id = dr.id LEFT JOIN employee_region er ON e.id = er.id AND dr.region = er.region WHERE e.id = 123;
执行结果
| REGION | SCORE |
|---|---|
| SOUTHWEST | 8745829483 |
| NORTHWEST | 3125533132 |
内容的提问来源于stack exchange,提问作者turbofood
相关产品推荐
相关产品推荐

