gpt4 book ai didi

asp.net - 来自多个连接表的 COUNT 行 - MSSQL

转载 作者:行者123 更新时间:2023-12-05 05:27:04 24 4
gpt4 key购买 nike

我正在尝试为学校项目制作一个简单的论坛。我的查询遇到了一些麻烦。我有 3 个表,我正在尝试加入。 “类别”、“主题”和“帖子”。

ERD

ERD

表格数据

类别

Category

线程

Threads

帖子

Posts

(尽管数据库中的名称拼写略有不同,但列和表是相同的,如图所示。)一旦我加入第二个表(“帖子”),“线程”计数的结果就是错误的。如果我只离开加入并计算“线程”中的行数,那么结果是正确的。

当我这样做时:

    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

结果是

enter image description here

返回“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

然后我得到这个结果:

enter image description here

它显示“帖子”中作为“主题”和“帖子”的实际行数。

我也试过像这样将多个查询合并为一个查询:

    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;

这给了我这个结果:

enter image description here

这是正确的数据。我宁愿将它组合在 1 个查询中,因为我不能从第二个查询中“Eval”“NumberOfPosts”。

我得到这个错误:

"DataBinding: 'System.Data.DataRowView' does not contain a property with the name 'NumberOfPosts'"

我已经阅读并尝试了很多不同的东西,但不知道如何解决。我希望有人能提供帮助。

最佳答案

我认为您只是在第二次加入时错过了加入条件 Post.FkUserId = Threads.FkUserId

尝试:

 LEFT JOIN Posts ON Threads.Id = Posts.FkThreadId  AND PostFkUserId = Threads.FkUserId

基本上您查询匹配更多记录,因为您仅在 Threads.Id = Posts.FkThreadId 上加入。 Post表中有7条FkThreadId为7,6,6,5,2,2,2的记录。

关于asp.net - 来自多个连接表的 COUNT 行 - MSSQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22179900/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com