繁体   English   中英

SQL-帮助左联接查询

[英]SQL - Help left join query

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM