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

时间:2017-12-07 23:07:26

标签: sql sql-server tsql join

我有一个父表,其中包含一个主键(IdMain),两个独立的表用作外键。

e.g。

MainTable
  |--Child1
  |--Child2

是否有一种简单的方法可以计算具有特定IdMain的Child1和Child2中的条目数?

我可以使用两个查询来执行此操作,这两个查询都是内部联接,然后添加结果 - 我尝试将MainTable mt1MainTable mt2放在同一个FROM但未获得结果我预料到了。

3 个答案:

答案 0 :(得分:0)

这样的事情应该有效:

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;

答案 1 :(得分:0)

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)

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

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