我有两个表,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;
我检查过并尝试关注this,this和this帖子,但出于某种原因,上述代码无效。
有什么想法吗?
编辑: 类型字段位于Content表中,导致问题为“Will A”指出
答案 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,请执行此列的总和。
希望这有帮助