使用group by时,结果为0时不显示Count(*)

时间:2011-11-12 03:24:11

标签: mysql

抱歉,我想不出一个更好的头衔......

所以我有这个数据库,我有一个表'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)

3 个答案:

答案 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