我的查询
SELECT
rc.id as id,
rc.name AS categoryName,
count(r.category) AS raveCount
FROM
rave r
LEFT JOIN
rave_category rc ON (r.category = rc.id)
WHERE
r.sent_by = 1
GROUP BY rc.id;
我在这里同时附上了两个表格结构
但是答案不返回其他类别名称的第0个值
答案 0 :(得分:1)
如果我正确地设定了目标,则只需将左右表切换为相反的表即可。
SELECT
rc.id as id,
rc.name AS categoryName,
count(r.category) AS raveCount
FROM rave_category rc
LEFT JOIN rave r
ON r.category = rc.id
AND r.sent_by = 1
GROUP BY rc.id;
答案 1 :(得分:0)
r.category
在左表中。在null
之后,它将没有Left Join
值(由于记录不匹配)。您需要对rc.id
进行计数,以便将其计数为零(在最右边的表中没有匹配的条目)。
此外,您还应该提及Group by中的所有select
列(聚合表达式除外)。
此外,您需要从最左侧的表中选择r.category
。而且,我已将别名更改为cat_id
,以使其无歧义。
尝试:
SELECT
r.category AS cat_id,
rc.name AS categoryName,
count(rc.id) AS raveCount
FROM
rave r
LEFT JOIN
rave_category rc ON (r.category = rc.id)
WHERE
r.sent_by = 1
GROUP BY cat_id,
categoryName
答案 2 :(得分:0)
使用ifnull
函数(如果为null)将返回0
SELECT
rc.id as id,
rc.name AS categoryName,
IFNULL(count(r.category),0) AS raveCount
FROM
rave r
LEFT JOIN
rave_category rc ON (r.category = rc.id)
WHERE
r.sent_by = 1
GROUP BY rc.id,rc.name;