【发布时间】:2023-02-01 17:29:36
【问题描述】:
我有一个问题,谷歌和 15 年的 IT 经验不再帮助我,我跑到角落里寻找解决方案,我希望有人能帮助我摆脱困境。
我有一个包含person数据的表,一个包含person_assignments的表和一个包含projects的表。每个人都可以参与多个项目(通过 person_assignments 连接)。
现在我想得到每个没有当前项目的人。 我知道如何只获得目前有项目的人。而且我知道如何只获得目前没有项目的 person_assignments。
但是以下声明仅向过去没有项目的人提供了不知道他们可能有当前项目的人:
SELECT DISTINCT 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
LEFT OUTER JOIN Employee_Assignments ea ON ea.employee_id = e.id
WHERE ((NOT((ea.since_date <= DATE_ADD(NOW(), INTERVAL +2 WEEK) OR ea.since_date IS NULL)AND(NOT(ea.until_date <= DATE_ADD(NOW(), INTERVAL +2 WEEK)) OR ea.until_date IS NULL))OR NOT ea.booking_type = "hard") OR NOT {{ switch.value }})
我正在考虑让所有没有项目的人,然后从目前有项目的人中减去他们,但是我找不到语句从 sql 中的另一个减去集合,因为 MINUS 不起作用并且我有很多 WHERE 子句需要处理,为简单起见,我在这里将其删除。
【问题讨论】:
-
没有深入探讨你的问题,但有几种方法可以在 MySQL 中模拟
MINUS。最著名的是反连接模式 (stackoverflow.com/a/31398185/625594) 和使用NOT IN (...)子查询。
标签: mysql