我正在尝试为一个学校项目制作一个简单的论坛。 我在查询时遇到了一些麻烦。 我有3个表格,我正在尝试加入。 “类别”,“主题”和“发布”。来自多个连接表的COUNT行 - MSSQL
ERD
表数据
类别
线程
帖子
(即使名称的拼写是在DB有点不同,在列和表是相同的,如所示的图像英寸) 只要我加入第二个表格(“帖子”),“线程”计数的结果是错误的。 如果我只留下连接并计算“线程”中的行数,那么结果是正确的。
当我这样做:
SELECT Category.Name AS CategoryName, Category.Description AS
CategoryDescription, COUNT(Threads.Id) AS NumberOfThreads
FROM Category
LEFT JOIN Threads ON Threads.FkCategoryId = Category.Id GROUP
BY Category.Name, Category.Description
结果是
它返回 “主题” 行的实际数量。一切都很好,到目前为止, 但是当我添加第二个加入
SELECT Category.Name AS CategoryName, Category.Description AS CategoryDescription,
COUNT(Threads.Id) AS NumberOfThreads,
COUNT(Posts.Id) AS NumberOfPosts
FROM Category
LEFT JOIN Threads ON Threads.FkCategoryId = Category.Id
LEFT JOIN Posts ON Posts.FkThreadId = Threads.Id
GROUP BY Category.Name, Category.Description
然后我得到这样的结果:
其中显示了“文章”既是“的实际行数主题“和”帖子“。
我也曾尝试多个查询在一个像这样的组合:
SELECT Category.Name AS CategoryName, Category.[Description] AS
CategoryDescription, COUNT(Threads.Id) AS NumberOfThreads
FROM Category
LEFT JOIN Threads ON Category.Id = Threads.FkCategoryId
GROUP BY Category.Name, Category.Description;
SELECT COUNT(Posts.Id) AS NumberOfPosts
FROM Category
LEFT JOIN Threads ON Category.Id = Threads.FkCategoryId
LEFT JOIN Posts ON Threads.Id = Posts.FkThreadId
GROUP BY Category.Id;
,给了我这样的结果:
这是正确的数据。我只想把它合并为1个查询,因为我不能从第二个查询中“Eval”“NumberOfPosts”。
我得到这个错误:
"DataBinding: 'System.Data.DataRowView' does not contain a property with the name 'NumberOfPosts'"
我已阅读并尝试了很多不同的东西,不知道如何解决它。我希望有人能帮帮忙。
我编辑了查询。 Dimt是正确的,我在主查询中缺少连接。子查询需要通过线程表连接。 –
谢谢。这很好。现在我只需要研究代码来了解发生了什么,因为我之前没有真正玩过子查询:) – chmodder