我有一个人员表和一个任务表。虽然一项任务可以由多人完成,但在两者之间有一个“名册”表:
person
task_roster
task
我正在寻找一个返回每个人及其当前活动任务的查询。如果他们没有活动任务,它应该简单地返回 NULL。我一直在搞砸以下内容:
SELECT *
FROM person
LEFT OUTER JOIN task_roster ON (task_roster.person = person.id)
LEFT OUTER JOIN task on (task.id = task_roster.task AND task.status = 1)
ORDER BY person.name
我也遇到的问题是此查询返回旧的名册条目,因此对于他们之前执行的每个任务,我都会多次返回同一个人。我还尝试在 person.name 上添加 Group By,但我没有得到任何现役职责,只有 NULL 值。
我正在寻找的结果是这样的:
+----------------+-----------+----------------+
| person.name | task.id | task.name |
+----------------+-----------+----------------+
| David Harris | 5 | Maintenance |
| Karen Simmons | 2 | Transport |
| Linda Foster | 5 | Maintenance |
| Michael King | NULL | NULL |
+----------------+-----------+----------------+
大卫和琳达都在做同一个任务。名册表只不过是 person.id 和 task.id 之间的链接