MySQL查询:同事缺勤时员工任务分配逻辑实现
优化后的MySQL查询方案
要实现你需要的任务承接逻辑,核心是针对不同优先级的承接场景,逐一校验所有更高优先级负责人的缺勤状态,同时修正原查询里的逻辑分组问题(原查询的OR和AND优先级没处理好,会导致错误匹配)。
优化后的查询如下:
SELECT a.Assign FROM assign_table a LEFT JOIN employee_credentials pri_ec ON a.Pri = pri_ec.姓名 LEFT JOIN employee_credentials sec_ec ON a.Sec = sec_ec.姓名 LEFT JOIN employee_credentials ter_ec ON a.Ter = ter_ec.姓名 WHERE -- 自身作为主负责人的任务,无条件纳入 a.Pri = 'Sally' OR -- 作为副负责人,仅当主负责人缺勤时承接 (a.Sec = 'Sally' AND pri_ec.absent = 1) OR -- 作为第三负责人,仅当主、副负责人都缺勤时承接 (a.Ter = 'Sally' AND pri_ec.absent = 1 AND sec_ec.absent = 1) OR -- 作为第四负责人,仅当主、副、第三负责人都缺勤时承接 (a.Qua = 'Sally' AND pri_ec.absent = 1 AND sec_ec.absent = 1 AND ter_ec.absent = 1) ORDER BY a.Assign;
关键说明:
- 用
LEFT JOIN关联employee_credentials表三次,分别获取主、副、第三负责人的缺勤状态,方便逐一校验。 - 每个OR条件都用括号包裹,明确逻辑分组,避免AND/OR优先级导致的错误匹配(原查询就是因为没分组,导致逻辑混乱)。
- 针对不同承接层级,严格校验所有更高优先级人员的
absent=1(缺勤)状态,确保只有满足前置条件时才承接任务。
如果需要动态指定查询的员工(比如不是固定查Sally),可以把员工姓名替换成参数,适配不同场景。
内容的提问来源于stack exchange,提问作者user22573594
相关产品推荐
相关产品推荐

