2

私はこれに少し立ち往生しています。3 つのテーブルがあり、テーブル 2 と 3 を異なる列のテーブル 1 に一致させたいと考えています。

tasks:
id      | item1_id       | item2_id   
--------------------------------------------
1       | 4              | 5   
2       | 5              | 6   
3       | 6              | 7  
--------------------------------------------

item1:
id      | item1_name     
--------------------------------------------
4       | item1_a              
5       | item1_b              
6       | item1_c              
--------------------------------------------

item2:
id      | item2_name     
--------------------------------------------
5       | item2_a              
6       | item2_b              
7       | item2_c              
--------------------------------------------

私が試してきたことは次のとおりです。

SELECT tasks.id AS taskID, item1.name AS item1Name, item2.name AS item2Name
FROM tasks LEFT JOIN (item1 CROSS JOIN item2) 
ON (tasks.item1_id = item1.id AND tasks.item2_id = item2.id),
users, notes 
WHERE users.task_id = tasks.id
AND notes.task_id = tasks.id;

タスクを返していますが、item1 または item2 からの情報ではありません。

4

3 に答える 3

5

なぜあなたはやっているのcross joinですか?left join2 つの sを実行するだけです。

SELECT tasks.id AS taskID, item1.name AS item1Name, item2.name AS item2Name
FROM tasks LEFT JOIN
     item1
     on tasks.item1_id = item1.id LEFT JOIN
     item2
     on tasks.item2_id = item2.id LEFT JOIN
     users
     on users.task_id = tasks.id LEFT JOIN
     notes
     on notes.task_id = tasks.id;

tasksこれにより、他のテーブルのすべての一致するフィールドとともに、すべてのレコードが に保持されます。

注:句と句joinの両方を使用して条件を混在させないでください。実際、ルールは簡単です。s の句を避ける。常に使用します。onwherewherejoinon

于 2013-10-31T18:54:35.490 に答える
1

単にそのように:

SELECT 
    tasks.is AS taskId,
    item1.item1_name AS item1Name,
    item2.item2_name AS item2Name
FROM tasks
JOIN users ON users.task_id = tasks.id
JOIN notes ON notes.task_id = tasks.id
LEFT JOIN item1 ON item1.id = tasks.item1_id
LEFT JOIN item2 ON item2.id = tasks.item2_id
于 2013-10-31T18:54:54.363 に答える
0

試す

    SELECT tasks.id AS taskID, item1.name AS item1Name, item2.name AS item2Name
    FROM tasks LEFT JOIN 
    ON tasks.item1_id = item1.id 
    LEFT JOIN item2 on tasks.item1_id = item2.id 
    JOIN users on users.task_id = tasks.id 
     JOIN notes on notes.task_id = tasks.id; 
    WHERE users.task_id = tasks.id
    AND notes.task_id = tasks.id;
于 2013-10-31T18:54:26.293 に答える