MySQL左边连接多行,如何在左边的每一行中合并为一行(我希望从右表中的字段合并)?

时间:2013-07-16 02:15:38

标签: php mysql

我有两个MySQL表,产品和条形码。一个产品可能有多个条形码,这就是为什么我把它分成它自己的表。

这是我尝试过的(使用CodeIgnighter的Active Record,但我在这里写出了查询,这意味着如果有拼写错误,可能不在我的实际查询中):

SELECT
    products.id,
    products.snipe_price,
    group_concat(barcodes.barcode) as barcodes
FROM products
LEFT JOIN barcodes on barcodes.product_id = products.id

但是这只会返回包含每个产品concat的所有条形码的一行,如何为每个产品条形码获取一行?

我宁愿不必将其拆分,但如果没有join的解决方案,那么请告诉我。

1 个答案:

答案 0 :(得分:26)

您需要group by

SELECT products.id, products.snipe_price, group_concat(barcodes.barcode) as barcodes
FROM products LEFT JOIN
     barcodes
     on barcodes.product_id = products.id
group by products.id;

如果没有group by,MySQL会将整个查询解释为聚合查询,以汇总所有数据(因为存在group_concat()聚合函数)。因此它只返回一行,总结所有数据。