Sql 如何跨三个表执行访问计数?

Sql 如何跨三个表执行访问计数?,sql,ms-access,oledb,Sql,Ms Access,Oledb,为了简单起见,我有一个三张桌子 类别(1…多)主题(1…多)帖子 我试图达到的目的是获得一个分类ID和这个分类中的主题总数以及帖子总数 我得到的最佳结果是使用以下查询: SELECT category.ID, COUNT(topic.id) AS topiccount, COUNT(post.id) AS postcount FROM ((category) LEFT JOIN topic ON topic.categoryid = category.id) LEFT JOIN post

为了简单起见,我有一个三张桌子 类别(1…多)主题(1…多)帖子

我试图达到的目的是获得一个分类ID和这个分类中的主题总数以及帖子总数

我得到的最佳结果是使用以下查询:

SELECT category.ID, COUNT(topic.id) AS topiccount, COUNT(post.id) AS postcount
FROM ((category)
 LEFT JOIN topic  ON topic.categoryid = category.id)
 LEFT JOIN post ON post.topicid = topic.id
GROUP BY category.id
不幸的是,即使我的表中只有6个主题与一个类别相关,我也得到了“7”。 我对它做了一些研究,似乎我必须在计数中使用一个不同的关键字,但是access不支持它,并且我无法在子查询中找到适当的方法


谢谢你的帮助

您又得到一条记录,因为您没有计算主题,实际上是在计算主题加入后的记录。使用以下命令:

SELECT category.id, count(topic.id), Nz(Sum(numofposts),0)
FROM (category LEFT JOIN (
    SELECT topic.id, count(post.id) as numofposts, topic.categoryId
    FROM topic LEFT JOIN post on topic.id = post.topicId
    GROUP BY topic.id, topic.categoryId
) as TP ON category.id=TP.categoryid)
GROUP BY category.id
Nz
用于确保在空主题中不会得到空和