【问题标题】:MySQL \ join 2 tables and show results from 2 rows in one columnMySQL \ 连接 2 个表并在一列中显示 2 行的结果
【发布时间】:2014-04-07 07:33:11
【问题描述】:

我有 2 张桌子。一个是产品列表,第二个是连接到每个产品的图像列表。

产品为 P

ID | NAME 
1 | apple
2 | plum
3 | carrot
4 | strawberry
5 | pie


IM 图像

PRODUCT_ID | IMAGE | I_NAME
1 | 1 | app_abc.jpg
1 | 2 | apple.jpg
1 | 3 | appleonemoretime.jpg
2 | 1 | plum.jpg
2 | 2 | plum2.jpg
2 | 3 | plum3.jpg
2 | 4 | plum4.jpg
3 | 1 | somecarrot.jpg
4 | 1 | s1.jpg

等等...

附加信息:
- 每个产品至少有 1 张图片。
- 与一个产品关联的最大图片数量为 60。我想获得:图片名称的产品列表(一行 = 一个产品)
- 我将按 product.id 搜索产品 - 我想在一列中获取图像,用逗号分隔,我不想获得 60 个“空”列。

例如:如果我搜索 p.id (1, 3) 我想得到类似的东西:

P.ID | IM1.I_NAME  
1 | app_abc.jpg, apple.jpg, appleonemoretime.jpg  
3 | somecarrot.jpg

有办法吗? 'COALESCE' 对这个有好处吗?

我现在拥有的是:

select p.id
from products p 
join images im on im.product_id = p.id 
where p.id in (1, 3)

【问题讨论】:

    标签: mysql sql join subquery


    【解决方案1】:

    GROUP_CONCAT 是你最好的朋友,你的查询应该是这样的:

    SELECT p.id, GROUP_CONCAT( im.i_name SEPARATOR '; ' ) AS images
    FROM products p 
    LEFT JOIN images im ON (im.product_id = p.id)
    WHERE p.id IN (1, 3) GROUP BY p.id
    

    【讨论】:

      【解决方案2】:

      您可以在查询中使用group_concat。试试这个查询,

      select p.id, group_concat(im.I_NAME)
      from products p 
      join images im on im.product_id = p.id 
      where p.id in (1, 3)
      group by p.id
      

      【讨论】:

        【解决方案3】:

        【讨论】:

          【解决方案4】:

          试试这个:

          select p.id, group_concat(im.I_NAME separator ',') from products p  left join images im on im.product_id = p.id  where p.id in (1, 3) group by p.id
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2014-10-31
            • 2014-06-10
            • 2019-03-27
            • 2016-11-03
            • 1970-01-01
            • 1970-01-01
            • 2023-03-23
            • 1970-01-01
            相关资源
            最近更新 更多