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
我正在尝试使用唯一查询获取数据,但无法获得我想要的数据。 我有 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