抱歉,我想不出一个更好的头衔......
所以我有这个数据库,我有一个表'bibitems'(基本文本)'标签'(文本归档的标签)和'taglinks'(bibitem和标签之间的关联实体)
因此,在我的页面上,我想显示每个标记,然后直接显示在该标记下提交的文档数量 所以,如果2个文件在“java”下,那就说了 java(2)
SELECT
tags.id,
naamnl,
COUNT(*) AS 'count'
FROM
tags,
bibitems,
taglinks
WHERE
bibitems.id=taglinks.item_id
AND tag_id=tags.id
GROUP BY
naamnl
当存在某个标签下的文档时,这种方法很有效。 但是,到目前为止,还有一个尚未使用的标签,它将不会弹出。
我想让它在那种情况下显示java(0)
答案 0 :(得分:2)
SELECT tags.id,
tags.naamnl,
COUNT(bibitems.id) AS 'count'
FROM tags
LEFT
OUTER
JOIN taglinks
ON taglinks.tag_id = tags.id
LEFT
OUTER
JOIN bibitems
ON bibitems.id = taglinks.item_id
GROUP
BY tags.id,
tags.naamnl
;
或
SELECT tags.id,
tags.naamnl,
( SELECT COUNT(*)
FROM bibitems
WHERE bibitems.id IN
( SELECT taglinks.item_id
FROM taglinks
WHERE taglinks.tag_id = tags.id
)
)
FROM tags
GROUP
BY tags.id,
tags.naamnl
;
(接受你的选择。)
答案 1 :(得分:1)
阅读INNER和OUTER联接之间的区别。
SELECT tag.id, naamnl, COUNT(taglink.tag_id) AS 'count'
FROM tag
LEFT OUTER JOIN taglink ON taglink.tag_id=tag.id
LEFT OUTER JOIN bibitem ON bibitem.id=taglink.item_id
GROUP BY tag.id, naamnl
答案 2 :(得分:0)
像这样的东西应该这样做。 (由于您没有提供完整的表模式,因此很难。)
SELECT
i.naamnl,
COALESCE(t.Count, 0) AS Count
FROM
bibitems i
LEFT JOIN
(
SELECT
tag_id,
COUNT(*) AS Count
FROM
taglinks
GROUP BY
item_id
) t
ON
t.tag_id = i.tag_id