【问题标题】:MySQL - category with product count not showing all resultsMySQL - 产品数量未显示所有结果的类别
【发布时间】:2021-09-26 11:57:08
【问题描述】:

我正在尝试在类别列表中显示产品数量以及类别名称。

我可以通过 JOIN 实现这一点,但并非所有类别都显示出来。

我的意思是没有显示包含 0 个产品的类别,但是我将 JOIN 更改为 LEFT JOIN,它只显示一个包含 0 个产品的类别。 还有两个。

SELECT c.id 
     , c.name 
     , count( p.category_id ) product_count 
  FROM category c 
  LEFT 
  JOIN products p 
    ON c.id = p.category_id 
 GROUP 
    BY p.category_id

这是我要执行的查询。

如果有人有任何想法,请指导我。

【问题讨论】:

  • LEFT JOIN 是一个 OUTER JOIN(又名 LEFT OUTER JOIN)

标签: mysql sql join left-join inner-join


【解决方案1】:

SELECT c.id AS id, c.name AS name, count( p.category_id ) AS product_count FROM category c LEFT JOIN products p ON c.id = p.category_id 分组依据(c.id)

【讨论】:

    【解决方案2】:

    您的查询应该失败,因为GROUP BY 子句与SELECT 列不一致——c.idp.category_id 不同。 (旧版本的 MySQL 确实接受这种语法。)

    当没有匹配项时,您正在按具有 NULL 值的列进行聚合。您确实想按category 表中的列进行聚合。我会推荐:

    SELECT c.id, c.name , count( p.category_id ) AS product_count
    FROM category c LEFT JOIN 
         products p
         ON c.id = p.category_id
    GROUP BY c.id, c.name;
    

    请注意,GROUP BY 列与未聚合的 SELECT 列匹配。另外,as idas name 是多余的,所以我删除了它们。

    【讨论】:

    • 感谢@Gordon 的回答和详细解释。这行得通。
    【解决方案3】:

    使用这个组语句:

    GROUP BY c.id
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-01-11
      • 1970-01-01
      • 2021-07-29
      • 1970-01-01
      • 1970-01-01
      • 2020-09-17
      • 2016-08-21
      • 2017-06-13
      相关资源
      最近更新 更多