Mysql表连接多行

时间:2015-10-07 14:15:15

标签: mysql group-by left-join

我有一个名为 works 的表和一个名为 images 的表。一件作品可以有多张图片。我在表格图片中有 work_id ,其链接到表工作 id 。 我正在尝试构建单个查询来获取每个作品的所有作品和所有相关图像。

目前我可以从图像表中获得所有作品但只有一行。 这是查询。

SELECT w.id, w.title, i.imPath
FROM works w
LEFT JOIN images i ON w.id=i.work_id
WHERE w.isActive=1
GROUP BY w.id
ORDER BY w.ordr

有关如何获取每个作品的图像表中所有行的任何帮助吗?

谢谢

1 个答案:

答案 0 :(得分:3)

删除delete from users where (UserName, CreatedOn) not in (select UserName, MIN(CreatedOn) from users group by UserName)

GROUP BY

那应该给你所有你想要的行。

另一种看待它的方式:

SELECT w.id, w.title, i.imPath
FROM works w
LEFT JOIN images i ON w.id=i.work_id
WHERE w.isActive=1
ORDER BY w.ordr

作品

create table works(id int, title varchar(10));
insert into works values (1, 'hello'), (2, 'world');

create table images(id int, work_id int, impath varchar(100))
insert into images values (1, 1, '/data/hello1.png'), (2, 1, '/data/hello2.png'), (3, 2, '/data/world1.png');

图片

id | title
1  | hello
2  | world

在您的情况下,可以将其转换为类似的内容:

id | work_id | impath
1  | 1       | /data/hello1.png
2  | 1       | /data/hello2.png
3  | 2       | /data/world1.png

SQLFiddle示例:http://sqlfiddle.com/#!9/b5784c/1

要获得图像的标题,您可以执行以下操作:

SELECT w.id, w.title, 
       GROUP_CONCAT(DISTINCT i.imPath ORDER BY i.imPath SEPARATOR ',') AS images
FROM works w
LEFT JOIN images i ON w.id=i.work_id
WHERE w.isActive=1
GROUP BY w.id, w.title
ORDER BY w.ordr

Result:
id | title | images
1  | hello | /data/hello1.png,/data/hello2.png
2  | world | /data/world1.png