代码之家  ›  专栏  ›  技术社区  ›  BlueChippy

统计单个查询中子表的所有条目

  •  1
  • BlueChippy  · 技术社区  · 7 年前

    IdMain )两个单独的表用作外键。

    例如

    MainTable
      |--Child1
      |--Child2
    

    有没有一种简单的方法可以用特定的值来计算Child1和Child2中的条目数 IdMain公司 ?

    我可以用两个查询来完成,两个都是内部连接,然后添加结果——我已经尝试了 MainTable mt1 MainTable mt2 在相同的 FROM 但没有得到我预期的结果。

    3 回复  |  直到 7 年前
        1
  •  0
  •   StelioK    7 年前
    declare @Number int = number;
    
    
    select  M.IdMain
            , SUM( Count(C1.Id) + Count(C2.Id) ) as TotalSum
    from    Main M, Child1 C1, Child2 C2
    where   IdMain = @Number
    and     M.IdMain = C1.Id
    and     M.IdMain = C2.Id
    group 
    by      M.IdMain
    
        2
  •  0
  •   Ruslan Tolkachev    7 年前

    像这样的方法应该会奏效:

    SELECT m.IdMain,
           COUNT(c1.id),
           COUNT(c2.id)
    FROM MainTable m
    LEFT OUTER JOIN Child1 c1
      ON c1.id = m.IdMain
    LEFT OUTER JOIN Child2 c2
      ON c2.id = m.IdMain
    WHERE m.IdMain = SomeNumber
    GROUP BY m.IdMain;
    
        3
  •  0
  •   DhruvJoshi    7 年前

    您可以在两个子查询连接上使用完全外部连接,如下所示

    See Working demo

    create table MainTable (idMain int);
    insert into MainTable values (1),(2),(3),(4)
    create table Child1 (idChild int);
    insert into Child1 values (1),(1),(2),(3),(3),(3)
    create table Child2 (idChild int);
    insert into Child2 values (2),(2),(2),(3)
    
    select 
    A.idMain,
    ISNULL(countA,0) +ISNULL(countB,0) as count
    from
    (
        select 
        M.idMain,count(1) countA 
        from MainTable M 
        join Child1 A 
        on A.idChild=M.idMain 
        group by M.idMain
    )A 
    full outer join
    (
        select 
            M.idMain,count(1) countB 
        from MainTable M 
        join Child2 B 
        on B.idChild=M.idMain 
        group by M.idMain
     )B
     on A.idMain=B.idMain
     --- your where clause goes here