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连接多对多单行的主要内容,如果未能解决你的问题,请参考以下文章

如何正确索引 MySQL 中多对多连接的链接表?

针对标签上的多对多连接优化 MySQL 查询

mysql 多对多映射关系的筛选SQL怎么写

Mysql连接查询匹配所有标签的多个“标签”(多对多关系)?

MySQL选择连接多对多表加上IN和NOT IN

在 MySQL 中,对于连接谓词之间具有多对多关系的大型表,最有效的查询设计是啥?