MySQL连接多对多单行

25

我有三个表要合并,详见下文:

产品

  • 产品ID
  • 名称
  • 价格

产品类别

  • 产品ID
  • 类别ID

类别

  • 类别ID
  • 名称

合并后的表

产品.产品ID 类别.类别ID 产品.名称 产品.价格 类别.名称(每个产品可能属于多个类别)

我的目标是在单个查询中获得每个产品及其相关类别。我该如何做?


你的“joined”部分需要澄清。 - OMG Ponies
@OMG Ponies 好的,让我试试。当我加入时,我想要做的是在查询中列出我的产品,并显示该产品所属的所有类别。这是否可能?如果这太模糊,请告诉我。 - Nathan Stanford II
更新问题,不要在评论中回复。 - OMG Ponies
2个回答

51
你需要进行两次连接查询:
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

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


我遇到的问题是,当实际上只有一个结果时,它仍然给出了两个结果。我想在单个查询中获取产品及其所有相关类别。 - Nathan Stanford II
1
使用Select Distinct与上述查询。 - Majd
@Nathon Stanford II: 你可以查看我的更新,我提供了一种替代方法。 - Mark Byers
1
哇哦!看起来解决了问题!第二个是让我困扰的。@Majd 我在其他查询中尝试了SELECT DISTINCT,但仍然出现问题。感谢@Mark Byers! - Nathan Stanford II

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接