使用COUNT和GROUP BY在MySQL中显示计数为0的行

时间:2011-06-08 06:59:22

标签: mysql count outer-join

我有两个表,Subject和Content,其中Content引用带外键的Subject。我想显示每个主题在内容表中出现的次数(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;

我检查过并尝试关注thisthisthis帖子,但出于某种原因,上述代码无效。

有什么想法吗?

编辑: 类型字段位于Content表中,导致问题为“Will A”指出

3 个答案:

答案 0 :(得分:5)

哪一个表是type列?我假设它是内容 - 并且通过在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;

答案 1 :(得分:1)

type属于哪个表?如果type位于subject,则您的左连接应该有效。所以我假设type位于Content。那么问题是你的WHERE子句与Content中没有匹配行的情况不匹配。使用

WHERE (type = @type) OR (type IS NULL)

答案 2 :(得分:0)

改为使用外部联接。将null替换为0.将非null替换为1.而不是count,请执行此列的总和。

希望这有帮助