我有一个父表,其中包含一个主键(IdMain
),两个独立的表用作外键。
e.g。
MainTable
|--Child1
|--Child2
是否有一种简单的方法可以计算具有特定IdMain
的Child1和Child2中的条目数?
我可以使用两个查询来执行此操作,这两个查询都是内部联接,然后添加结果 - 我尝试将MainTable mt1
和MainTable mt2
放在同一个FROM
但未获得结果我预料到了。
答案 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