私は3つのテーブルpersons
,companies
およびtasks
を持っています。2つ目のテーブルに3つのテーブルLIMIT 1を結合します。
人物は異なる会社で異なる仕事をします。
私が望むのは、すべての人物テーブルのリスト、タスクで最後に実行したタスク、そしてそのタスクを実行するときの会社の名前です。最新のタスクは最新のtask_dateまたはそれ以上のid.taskである可能性がありますが、同じ結果が得られます。
persons
表:
| id | Name |
| 1 | Person 1 |
| 2 | Person 2 |
| 3 | Person 3 |
| 4 | Person 4 |
表companies
:
—————————————————————
| id | company |
—————————————————————
| 1 | Company 1 |
| 2 | Company 2 |
| 3 | Company 3 |
| 4 | Company 4 |
—————————————————————
表tasks
:
————————————————————————————————————————————————————————————————————
| id | task_name | task_date | id_persons | id_companies |
————————————————————————————————————————————————————————————————————
| 1 | Task 1 | 2015-01-02 | 1 | 3 |
| 2 | Task 2 | 2016-03-02 | 1 | 4 |
| 3 | Task 3 | 2016-06-04 | 2 | 1 |
| 4 | Task 4 | 2016-01-03 | 4 | 2 |
は
結果は、このようなテーブルであるべきです
| persons.id | persons.name | company.name |
| 1 | Person 1 | Company 4 |
| 2 | Person 2 | Company 1 |
| 3 | Person 3 | |
| 4 | Person 4 | Company 2 |
——————————————————————————————————————————————————
私はこのクエリがあります:
SELECT t.id id_t, t.id_companies t_id_companies, c.company_name , p.*
FROM persons p
INNER JOIN tasks t ON t.id_persons = p.id
INNER JOIN
(
SELECT id_persons, MAX(id) max_id
FROM tasks
GROUP BY id_persons
) b ON t.id_persons = b.id_persons AND t.id = b.max_id
INNER JOIN companies c ON c.id = t.companies.id
WHERE p.deleted = 0
私は結果がOKだと思いますが、しかし、そこにいくつかの行方不明者、なぜならINNER JOIN
の使用(Iは、関連するすべてのタスクを持っていない者を持っています)。 INNER JOIN
をLEFT JOIN
に変更しようとしましたが、結果はOKではありませんでした。
何か助けていただければ幸いです。
のですか? – trincot
左外部結合を試みることができますか? –
なぜ、左結合の結果はOKではありませんか? –