2016-05-12 5 views
0

Ich versuche, Daten mit einer einzigen Abfrage, aber ich kann nicht bekommen, was ich will. Ich habe 3 Tabellen: Ich möchte alle Fotos Daten mit ihren max Schritt (ID und Name). Wenn sie es nicht haben, ist ein Nullwert in Ordnung.SQL - Hilfe linke Join Abfrage

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   

Das Ergebnis, das ich haben möchte, ist, dass

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 

ich diese Abfrage habe versucht, aber es fehlt etwas, weil zu viele Linien:

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

ich habe diese Art von Ergebnissen:

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 

Jede Hilfe wird sehr geschätzt. Danke im Voraus.

+0

Diese Art von Problem ist "Max in der Gruppe" genannt. Google das und Sie finden viele verschiedene Ansätze zur Lösung Ihres Problems. –

Antwort

2

Sie benötigen ein LEFT JOIN auf MAX(step_id) jeden photo_id zu tun:

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

Danke. Es klappt. :) – Stephtheboss