我正在为学校项目制作一个简单的论坛,但遇到了一些查询问题。我有三个表需要连接,它们分别是“类别”、“主题”和“帖子”。
ERD
表数据:
类别
主题
帖子
即使数据库中的名称拼写有点不同,但列和表与图像中显示的相同。
当我连接第二个表(“帖子”)时,“主题”计数的结果就会出错。如果我只是按照左连接并计算“主题”的行数,那么结果就正确。
结果如下:
ERD
表数据:
类别
主题
帖子
即使数据库中的名称拼写有点不同,但列和表与图像中显示的相同。
当我连接第二个表(“帖子”)时,“主题”计数的结果就会出错。如果我只是按照左连接并计算“主题”的行数,那么结果就正确。
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
结果如下:
结果为
这将返回“Threads”表中实际行数。目前一切都很好, 但是当我添加第二个联接时:
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;
这给了我这个结果:
这是正确的数据。我更希望将它们合并成一个查询,因为我无法从第二个查询中“评估”“NumberOfPosts”。
我得到了这个错误:
"DataBinding:'System.Data.DataRowView'不包含名称为'NumberOfPosts'的属性"
我已经阅读并尝试了很多不同的方法,但不知道如何解决。我希望有人能帮忙。