求助:如何用MySQL查询无当前项目的人员数据
解决MySQL中查询无当前项目人员的问题
核心思路
由于MySQL不支持MINUS语法,我们可以用**NOT EXISTS子查询**实现“所有人员减去有当前项目的人员”的需求,这是MySQL中替代差集操作的常用方案。
定义“当前项目”的判定规则
根据你提供的原有逻辑,当前项目需满足:
- 分配类型为
hard - 开始日期
since_date不晚于当前时间加2周(或开始日期为空) - 结束日期
until_date晚于当前时间加2周(或结束日期为空)
最终SQL语句
SELECT e.id, e.pronoun, e.first_name, e.last_name, e.cost_center_id, e.roles_id, e.e_mail, e.phone, e.office_id, e.work_percentage FROM Employees e WHERE NOT EXISTS ( SELECT 1 FROM Employee_Assignments ea WHERE ea.employee_id = e.id AND ea.booking_type = 'hard' AND (ea.since_date <= DATE_ADD(NOW(), INTERVAL 2 WEEK) OR ea.since_date IS NULL) AND (ea.until_date > DATE_ADD(NOW(), INTERVAL 2 WEEK) OR ea.until_date IS NULL) )
逻辑说明
- 主查询遍历所有员工记录
NOT EXISTS子查询会检查当前员工是否存在符合“当前项目”条件的分配记录- 若子查询无结果返回(即该员工没有任何当前项目),则该员工会被纳入最终结果
- 该方案会自动包含从未参与过任何项目的员工,同时排除有当前项目的员工,无论他们是否有历史项目记录
内容的提问来源于stack exchange,提问作者DonMarco
相关产品推荐
相关产品推荐

