【问题标题】:one to many returns only one result一对多只返回一个结果
【发布时间】:2017-06-19 01:24:12
【问题描述】:

我有 3 张桌子

表1: product_id 姓名 说明

表2: 类别ID 姓名 说明

表 3: product_id category_id

我正在尝试创建一个查询来选择具有以下数据的表:product_name,product_description,product_category

问题是每一行应该包含多个 product_category 但查询只返回一个。

这是查询,如果您能告诉我哪个部分不正确

SELECT table1.name AS product_name,
       table1.description AS product_description,
       table2.name AS product_category
FROM table1 INNER JOIN
     table3
     ON table3.product_id = table1.product_id INNER JOIN
     table2
     ON table2.category_id = table3.category_id;

我得到的结果是:

product_name  -   product_description  -  product_category
NAME 1    -      Description 1     -     Category 1
NAME 2    -      Description 2     -     Category 2

我的目标是这样的:

product_name  -   product_description  -  product_category
NAME 1    -      Description 1         -     Category 1
                                             Category 2
                                             Category 5

NAME 2    -      Description 2     -     Category 7
                                         Category 2
                                         Category 1

【问题讨论】:

    标签: mysql sql


    【解决方案1】:

    如果您想在一行中放置多个产品类别,那么请考虑“聚合”:

    SELECT t1.name AS product_name,
           t1.description AS product_description,
           GROUP_CONCAT(t2.name) AS product_category
    FROM table1 t1 INNER JOIN
         table3 t3
         ON t3.product_id = t1.product_id INNER JOIN
         table2 t2
         ON t2.category_id = t3.category_id
    GROUP BY t1.name, t1.description;
    

    【讨论】:

    • 非常感谢,我认为这让我非常接近,但是它仍然返回一个 table3.name ,而它应该返回更多,如描述中所述
    • @jukerok 。 . .你的评论毫无意义。 table3 没有名为 name 的列。
    • 我的错我的意思是 table2.name
    • @jukerok 。 . . table2.name 返回值的数量基于 table3 中的内容。查询中的任何内容(除了内部连接)都没有过滤掉值。
    【解决方案2】:

    我找到了答案,所有功劳归于@Gordon Linoff,因为我需要做的就是将 product_id 添加到分组中

    这是查询:

    SELECT t1.name AS product_name,
    t1.description AS product_description,
    GROUP_CONCAT(t2.name) AS product_category
    FROM table1 t1 INNER JOIN
    table3 t3
    ON t3.product_id = t1.product_id INNER JOIN
    table2 t2
    ON t2.category_id = t3.category_id
    GROUP BY t1.product_id, t1.name, t1.description;
    

    谢谢!

    【讨论】:

      猜你喜欢
      • 2022-11-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-17
      • 2016-05-23
      • 2017-01-03
      相关资源
      最近更新 更多