個人テーブルとタスクテーブルがあります。タスクは複数の人が行うことができますが、その間に「名簿」テーブルがあります。
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 |
+----------------+-----------+----------------+
David と Linda は同じタスクに取り組んでいます。名簿テーブルは、person.id と task.id の間のリンクに過ぎません。