gpt4 book ai didi

mysql - SQL - 帮助左连接查询

转载 作者:行者123 更新时间:2023-11-29 07:18:01 24 4
gpt4 key购买 nike

我正在尝试使用唯一的查询来获取数据,但我无法得到我想要的。我有 3 张 table :我想获取所有照片数据及其最大步长(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_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

关于mysql - SQL - 帮助左连接查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37180783/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com