MySQL连接多对多单行

Nat*_* II 19 mysql sql join

我有3个表要结合,详见下文:

产品

  • 的productID
  • 名称
  • 价钱

prod_cat

  • 的productID
  • 的categoryID

类别

  • 的categoryID
  • 名称

加盟

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

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

Mar*_*ers 33

你需要两个连接:

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
Run Code Online (Sandbox Code Playgroud)

如果某个产品可能不属于任何类别且您仍想要返回该产品,请在两个位置将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
Run Code Online (Sandbox Code Playgroud)

但是,最好只使用两个查询,而不是将多个值放入单个单元格中.