MySQL连接多对多单行
Posted
技术标签:
【中文标题】MySQL连接多对多单行【英文标题】:MySQL join many to many single row 【发布时间】:2011-07-06 17:57:33 【问题描述】:我有 3 个表要合并,详情见下文:
产品
产品ID 姓名 价格prod_cat
产品ID 类别ID类别
类别ID 姓名加入
product.productID category.categoryID product.name product.price category.name(每个都有,因为一个产品可以属于多个类别)
我想要做的是在单个查询中获取每个产品及其相关的类别。我该怎么办?
【问题讨论】:
您的“已加入”部分可以使用说明 @OMG Ponies 好的,让我试试。当我加入时,我想做的是让我的产品在查询中列出一次,其中包含该产品所属的所有类别。这甚至可能吗?让我知道这是否含糊。 更新问题,不要在评论中回复。 【参考方案1】:你需要两个连接:
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
但是,最好只使用两个查询而不是将多个值放入单个单元格中。
【讨论】:
我遇到的问题是,当实际上只有一个结果时,这仍然给了我 2 个结果。我想在单个查询中获取产品和所有相关类别。 对上述查询使用 Select Distinct @Nathon Stanford II:您可以查看我的更新,我提供了另一种方法。 哇哦!这似乎可以解决问题!第二个是让我绊倒的原因。 @Majd 我确实在其他查询中尝试了 SELECT DISTINCT ,但它仍然出现了问题。谢谢@Mark Byers!【参考方案2】:如果使用 mysql,您可以使用 group_concat...
看到这个帖子。
SQL to join one table to another table multiple times? (Mapping products to categories)
(可能重复)
【讨论】:
以上是关于MySQL连接多对多单行的主要内容,如果未能解决你的问题,请参考以下文章