我的查询是这样的
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个值
如果我的目标正确,你只需要将左右桌子切换到相反的位置。
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;
在null的情况下使用ifnull
函数它将返回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;
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