【问题标题】:MySQL join many to many single rowMySQL连接多对多单行
【发布时间】: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 好的,让我试试。当我加入时,我想做的是让我的产品在查询中列出一次,其中包含该产品所属的所有类别。这甚至可能吗?让我知道这是否含糊。
  • 更新问题,不要在评论中回复。

标签: mysql sql join


【解决方案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)

(可能重复)

【讨论】:

    猜你喜欢
    • 2013-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-15
    • 1970-01-01
    • 2012-02-25
    • 2016-01-04
    • 1970-01-01
    相关资源
    最近更新 更多