MySQL \ join 2表并显示一列中2行的结果

时间:2014-04-07 07:33:12

标签: mysql sql join subquery

我有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' null'列。

例如:如果我搜索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)

4 个答案:

答案 0 :(得分:1)

您可以在查询中使用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

答案 1 :(得分:1)

答案 2 :(得分:1)

试试这个:

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

答案 3 :(得分: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