Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL计数和IFNULL_Mysql_Sql_Count_Left Join - Fatal编程技术网

MySQL计数和IFNULL

MySQL计数和IFNULL,mysql,sql,count,left-join,Mysql,Sql,Count,Left Join,我有这样的桌子: 我想数一数每个类别有多少种产品 SELECT `category_id`, `category_name`, IFNULL(count(*),0) cat_stat FROM `product_to_categories` NATURAL JOIN `categories` GROUP BY `category_id` 除了IFNULL部分外,它几乎正常工作。 我收到: +-------------+---------------+----------

我有这样的桌子:

我想数一数每个类别有多少种产品

SELECT `category_id`, `category_name`, IFNULL(count(*),0) cat_stat 
FROM 
    `product_to_categories`
NATURAL JOIN 
    `categories`
GROUP BY `category_id`
除了IFNULL部分外,它几乎正常工作。
我收到:

+-------------+---------------+----------+
| category_id | category_name | cat_stat |
+-------------+---------------+----------+
| 1           | category1     | 5        |
+-------------+---------------+----------+
| 2           | category2     | 5        |
+-------------+---------------+----------+
| 3           | category3     | 6        |
+-------------+---------------+----------+
| 5           | category5     | 4        |
+-------------+---------------+----------+
但我也希望得到空结果:

+-------------+---------------+----------+
| category_id | category_name | cat_stat |
+-------------+---------------+----------+
| 1           | category1     | 5        |
+-------------+---------------+----------+
| 2           | category2     | 5        |
+-------------+---------------+----------+
| 3           | category3     | 6        |
+-------------+---------------+----------+
| 4           | category4     | 0        |
+-------------+---------------+----------+
| 5           | category5     | 4        |
+-------------+---------------+----------+

谢谢

您可以从
类别开始
,然后将产品映射表与
左连接
,最后根据映射表中的一列进行聚合

select category_id, c.category_name, count(pc.category_id) cat_stat 
from categories c
left join product_to_categories pc using(category_id)
group by category_id
不需要
ifnull()
count()
从不返回
null

  • 自然连接==自然内部连接,而您需要外部连接
  • 基表是
    类别
    ,因此必须首先提到它(自然左联接从最左边的表中获取公共列的值)
  • 必须计算确定列,而不是公共列或总行数(它们将给出1,而不是0)
  • 选择'category\u id',
    `类别名称`,
    计数(`product\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
    来自`类别`
    自然左连接`产品_到_类别`
    按“类别”id分组`
    
    非常感谢您的解释!非常有用!