MySQL连接多对多单行

时间:2011-03-01 18:52:01

标签: mysql sql join

我想要组合3个表格,详见下文:

产品

  • productID
  • 姓名

prod_cat

  • productID
  • 的categoryID

类别

  • categoryID
  • 名称

接合

product.productID category.categoryID product.name product.price category.name(虽然每个产品可以属于多个类别)但

我想要做的是在单个查询中为每个产品提供与其相关的类别。我怎么会这样呢?

2 个答案:

答案 0 :(得分:30)

您需要两个联接:

SELECT
    product.productID,
    category.categoryID,
    product.name,
    product.price,
    category.name
FROM product
JOIN product_cat ON product.productID = product_cat.productID
JOIN category ON category.categoryID = product_cat.categoryID

如果某个产品可能没有任何类别且您仍想要退回,请在两个地方将JOIN更改为LEFT JOIN。

另一种方法:

SELECT
    product.productID,
    product.name,
    product.price,
    GROUP_CONCAT(category.name)
FROM product
JOIN product_cat ON product.productID = product_cat.productID
JOIN category ON category.categoryID = product_cat.categoryID
GROUP BY product.productID

然而,使用两个查询而不是将多个值放入单个单元格可能更好。

答案 1 :(得分:0)

如果使用mySQL ...

,可以使用group_concat

看到这个帖子。

SQL to join one table to another table multiple times? (Mapping products to categories)

(可能重复)