SQL - 帮助左连接查询

SQL - Help left join query

我正在尝试使用唯一查询获取数据,但无法获得我想要的数据。 我有 3 张桌子: 我想获取所有照片数据及其最大步长(ID 和名称)。 如果他们没有,空值也可以。

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 

非常感谢任何帮助。提前致谢。

您需要对每个 photo_id:

MAX(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