2016-05-12 7 views
0

私は唯一のクエリを使用してデータを取得しようとしているが、私は私が欲しいものを得ることができません。 私は3つのテーブルを持っています: 私は最大のステップ(IDと名前)ですべての写真のデータを取得したいと思います。 これがない場合、null値はOKです。SQL - 左のジョインのクエリを

Photo table 

photo_id | photo_name 
--------------------- 
1  | A 
2  | B 
3  | C 
4  | D 
5  | E 

Steps table 

step_id | step_name 
---------------------- 
1  | AAA   
2  | BBB   
3  | CCC   
4  | DDD 

photoStep table 

id | photo_id | step_id 
---------------------- 
1 | 1  | 1   
2 | 1  | 2   
3 | 1  | 3   
4 | 3  | 1 
5 | 5  | 1   

私が持っていると思います結果は

photo_id | photo_name | step_id | step_name 
------------------------------------------- 
1  | A   | 3  | CCC 
2  | B   | NULL | NULL 
3  | C   | 1  | AAA 
4  | D   | NULL | NULL 
5  | E   | 1  | AAA 

私はこのクエリを試してみたが、あまりにも多くの行ので、それが何かを見逃していることである:私が持っている

SELECT * FROM photo p 
LEFT JOIN photoStep ps ON ps.photo_id=p.photo_id 

この種の結果:

photo_id | photo_name | step_id | step_name 
------------------------------------------- 
1  | A   | 1  | AAA 
1  | A   | 2  | BBB 
1  | A   | 3  | CCC 
2  | B   | NULL | NULL 
3  | C   | 1  | AAA 
4  | D   | NULL | NULL 
5  | E   | 1  | AAA 

何か助けていただければ幸いです。前もって感謝します。

+0

この種の問題は、「グループ内で最大」と呼ばれています。 Googleとあなたはあなたの問題を解決するためのさまざまなアプローチをたくさん見つけるでしょう。 –

答えて

2

あなたは、各photo_idMAX(step_id)LEFT JOINを実行する必要があります。

SELECT 
    p.photo_id, 
    p.photo_name, 
    s.step_id, 
    s.step_name 
FROM Photo p 
LEFT JOIN (
    SELECT 
     photo_id, MAX(step_id) AS max_step_id 
    FROM photoStep 
    GROUP BY photo_id 
) ps 
    ON ps.photo_id = p.photo_id 
LEFT JOIN Steps s 
    ON s.step_id = ps.max_step_id 
+0

ありがとうございます。できます。 :) – Stephtheboss

関連する問題