gpt4 book ai didi

mysql - 根据条件连接两个表以及第二个表中的记录计数

转载 作者:行者123 更新时间:2023-11-29 18:28:54 25 4
gpt4 key购买 nike

我有下表 -

这里是SQLFIDDLE

类别

+-----------+-------------+
| column | type |
+-----------+-------------+
| id | int(11) |
| name | varchar(40) |
| unit | varchar(50) |
| is_active | tinyint(1) |
+-----------+-------------+

产品

+-------------+---------------+
| column | type |
+-------------+---------------+
| id | int(11) |
| category_id | int(11) |
| name | varchar(40) |
| base_rate | decimal(10,2) |
| is_active | tinyint(1) |
+-------------+---------------+

我想获取类别列表以及活跃产品数量。如果某个类别没有活跃产品,则应返回 0。

有点像下表 -

+----+--------+--------------+
| id | name | active_count |
+----+--------+--------------+
| 1 | Steel | 1 |
| 2 | Cement | 2 |
+----+--------+--------------+

我提出了以下查询 -

SELECT c.id, c.name, c.unit, COUNT(p.category_id) as active_count 
FROM `categories` c
JOIN `products` p
ON c.id = p.category_id
WHERE ( p.is_active = 1 )
GROUP BY p.category_id;

上面的查询仅在每个类别中至少有一个活跃产品时才有效。如果没有可用的产品,则应将 active_count 返回为 0

我该如何解决这个问题?

这里是SQLFIDDLE

最佳答案

使用LEFT JOIN而不是INNER JOIN :

SELECT c.id, c.name, c.unit, COUNT(p.category_id) as active_count 
FROM `categories` c
LEFT JOIN `products` p
ON c.id = p.category_id AND p.is_active = 1
GROUP BY c.id;

移动谓词 p.is_active = 1 也很重要来自WHERE ON 的条款,这样 categories所有条记录查询返回的表。

关于mysql - 根据条件连接两个表以及第二个表中的记录计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45896951/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com