抱歉,我想不出更好的标题了。
所以我有一个数据库,我有一个表'bibitems‘(基本文本)’tag‘(文本归档的标签)和’taglink‘( bibitem和tag之间的关联实体)
因此,在我的页面上,我想显示每个标记,紧跟其后的是该标记下归档的文档数量,所以如果有两个文档在' 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
发布于 2011-11-12 11:32:15
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
;(你自己选吧。)
发布于 2011-11-12 11:27:33
阅读内部连接和外部连接之间的区别。
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发布于 2011-11-12 11:36:16
像这样的东西应该就行了。(这很困难,因为您没有提供完整的表模式。)
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_idhttps://stackoverflow.com/questions/8102322
复制相似问题