MySQL - 在单行中显示子查询的结果

时间:2010-09-14 04:29:37

标签: sql mysql

我有两张桌子,产品和类别。产品可以分为多个类别。

product (<product_id>, name, desc, price)
category (<category_id>, slug, display_name)
product_category(<category_id>, <product_id>)

产品与类别有N:M的关系。我想要一个查询,在一行中显示产品的类别,比如

name           |   desc                           | categories
------------------------------------------------------------------
The One Ring     One ring to rule them all          Magical Item, Jewelry

魔法物品是一个类别,珠宝是另一个类别(不是现实生活中的例子。索伦不要求我开店)。

所以我在考虑:

SELECT name, desc, categories.display_name FROM product, category, 
category_product  WHERE product.product_id  = category_product.product_id AND
category_product.category_id = category.category_id

但是,如果该项目属于多个类别,则会导致该项目被多次列出。如何将所有类别归为一行?

1 个答案:

答案 0 :(得分:2)

使用:

  SELECT p.name,
         p.desc,
         GROUP_CONCAT(c.display_name) AS categories
    FROM PRODUCT p
    JOIN PRODUCT_CATEGORY pc ON pc.product_id = p.product_id
    JOIN CATEGORY c ON c.category_id = pc.category_id
GROUP BY p.name, p.desc