2016-05-12 114 views
0

我想使用一个唯一的查询获取数据,但我无法得到我想要的。 我有3个表格: 我想用他们的最大步骤(id和名称)获取所有照片数据。 如果他们没有它,空值是好的。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

这种类型的问题被称为“最大的群体”。谷歌,你会发现很多不同的方法来解决你的问题。 –

回答

2

你需要在每个MAX(step_id)photo_idLEFT 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