[英]Displaying rows with count 0 in MySQL using COUNT and GROUP BY
我有两个表,主题和内容,其中内容使用外键引用主题。 我想显示每个主题在内容表中出现的次数(如果没有出现,则为 0)。 但是下面的查询只给了我计数 > 0 的行,而忽略了其他的:
SELECT Subject.id, Subject.name, COUNT(Content.subject_id) AS `count`
FROM Subject LEFT JOIN Content
ON Subject.id = Content.subject_id
WHERE type = @type
GROUP BY Subject.id;
我检查并尝试关注这个、 这个和这个帖子,但由于某种原因,上面的代码不起作用。
有任何想法吗?
编辑:类型字段在内容表中,这导致了“Will A”指出的问题
在哪个表中type
列? 我假设它是 Content - 通过在 WHERE 子句中包含该字段,您将强制 LEFT JOIN 右侧的 Content 表中包含数据(这意味着 LEFT JOIN 实际上只是一个内部连接)。
尝试:
SELECT Subject.id, Subject.name, COUNT(Content.subject_id) AS `count`
FROM Subject
LEFT JOIN Content
ON Subject.id = Content.subject_id
AND type = @type
GROUP BY Subject.id;
列type
属于哪个表? 如果type
在subject
中,您的左连接应该可以工作。 所以我假设该type
在Content
中。 那么问题是您的 WHERE 子句与Content
中没有匹配行的情况不匹配。 利用
WHERE (type = @type) OR (type IS NULL)
改为进行外部联接。 将 null 替换为 0。将非 null 替换为 1。而不是计数,对此列求和。
希望这可以帮助
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.