【问题标题】:selecting records from main table and count of each row in another table从主表中选择记录和另一个表中每一行的计数
【发布时间】:2015-01-07 13:02:40
【问题描述】:

我的数据库中有 2 个表,这些表与外键有关系 我想从主表中选择所有记录,然后选择另一个表中每一行的计数,而不是从主表中具有相同的 ID 我试图创建一个选择查询,但它不能正常工作 此查询返回主表中的所有记录 + 下一个表中所有记录的计数(不是关系中每一行的计数)

    SELECT tblForumSubGroups_1.id, tblForumSubGroups_1.GroupID,
    tblForumSubGroups_1.SubGroupTitle, tblForumSubGroups_1.SubGroupDesc,
    (SELECT COUNT(dbo.tblForumPosts.id) AS Expr1
    FROM dbo.tblForumSubGroups INNER JOIN dbo.tblForumPosts ON 
    dbo.tblForumSubGroups.id = dbo.tblForumPosts.SubGroupID) AS Expr1
    FROM dbo.tblForumSubGroups AS tblForumSubGroups_1 INNER JOIN
    dbo.tblForumPosts AS tblForumPosts_1 ON tblForumSubGroups_1.id 
    = tblForumPosts_1.SubGroupID

【问题讨论】:

  • 请编辑您的问题并提供示例数据和所需的结果。
  • tblForumPosts 不需要加入,因为它在子查询中。

标签: sql sql-server


【解决方案1】:
SELECT  tblForumSubGroups_1.id, tblForumSubGroups_1.GroupID, tblForumSubGroups_1.SubGroupTitle, tblForumSubGroups_1.SubGroupDesc,
        COUNT(tblForumPosts_1.id) AS Expr1
FROM    dbo.tblForumSubGroups AS tblForumSubGroups_1
INNER JOIN  dbo.tblForumPosts AS tblForumPosts_1 ON tblForumSubGroups_1.id = tblForumPosts_1.SubGroupID
GROUP BY tblForumSubGroups_1.id, tblForumSubGroups_1.GroupID, tblForumSubGroups_1.SubGroupTitle, tblForumSubGroups_1.SubGroupDesc

【讨论】:

  • 评论一下,如果你改成LEFT JOIN,会列出零发帖的论坛!
  • 嗨 mr.gajjar ty 回复它的工作,现在我想问你一个问题,我在数据库中有三个表最后一个表是“tblForumReplyPost”,我想获得每一行的回复数我必须如何在我的查询中添加它?该表与带有 ID 的“tblForumPosts”和带有 PostID 的 tblForumReplyPost 相关
  • 在同一个查询中加入表 - tblForumReplyPost,并将 COUNT(tblForumReplyPost.ID) AS Expr2 添加到 SELECT 列表中。正如@jarlh 所指出的,如果您需要包含 0 个帖子或回复的论坛,请使用 LEFT JOIN。 GROUP BY 子句不会有任何变化。
  • ty 有用的帮助,你有 yahoo、skype、viber id 吗?我会和你在一起,这对我来说是很大的荣幸。
【解决方案2】:

我建议交叉申请,因为你可以用它做更多的事情......

SELECT t1.id,
   t1.GroupID,
   t1.SubGroupTitle,
   t1.SubGroupDesc,
   t2.val
FROM dbo.tblForumSubGroups AS t1
cross apply (SELECT COUNT(*)
         FROM dbo.tblForumPosts as t2
         WHERE t1.id = t2.SubGroupID) x(val)

【讨论】:

    【解决方案3】:

    不要混合子查询和连接逻辑。仅使用其中之一。我更喜欢子选择。

    SELECT tblForumSubGroups_1.id,
           tblForumSubGroups_1.GroupID,
           tblForumSubGroups_1.SubGroupTitle,
           tblForumSubGroups_1.SubGroupDesc,
           (SELECT COUNT(*)
            FROM dbo.tblForumPosts
            WHERE dbo.tblForumSubGroups.id = dbo.tblForumPosts.SubGroupID) AS Expr1
    FROM dbo.tblForumSubGroups AS tblForumSubGroups_1
    

    【讨论】:

      【解决方案4】:

      只是为了提供另一个答案,尽管我相信交叉应用可能是最好的选择:

      SELECT 
          A.id, A.GroupID, A.SubGroupTitle, A.SubGroupDesc,
          B.IDCount AS Expr1
      FROM dbo.tblForumSubGroups A 
      INNER JOIN (
          Select SubGroupID, Count(ID) as IDCount
          from dbo.tblForumPosts
          Group By SubGroupID
      ) B On A.ID = B.SubGroupID
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-01-21
        • 2021-01-26
        • 1970-01-01
        • 2020-12-28
        • 2023-03-31
        • 2015-08-27
        • 1970-01-01
        • 2019-11-20
        相关资源
        最近更新 更多