我有两张表如下:
create table tab_a
(
a_child varchar2(20),
a_parent varchar2(20)
);
create table tab_b
(
a_child varchar2(20)
);
使用以下数据:
insert into tab_a values ('tom','dick snr');
insert into tab_a values ('dick jnr','dick snr');
insert into tab_a values ('harry','dick snr');
insert into tab_a values ('bob','fred');
insert into tab_a values ('ann','fred');
insert into tab_b values ('bob');
insert into tab_b values ('ann');
insert into tab_b values ('harry');
我希望结果如下:
a_parent | total of children in tab_a | total of children in tab_b
dick snr | 3 | 1
fred | 2 | 2
- 注意:tab_a将包含tab_b所具有的所有值和更多值。实际上,tab_b是一个可存档的子项列表。但是,我不想归档任何没有在tab_b中拥有所有孩子的家长
SELECT ta.a_parent, COUNT (*) AS total_child_count, (select 'x' from dual)
FROM tab_a ta
GROUP BY ta.a_parent
我想解决上面的x ...它可能是一个连接的情况,但它需要考虑a_parent
答案 0 :(得分:2)
我认为你想要一个left join
和一个有两个计数的聚合:
select a.a_parent, count(a.a_child) as Achildren, count(b.a_child) as Bchildren
from tab_a a left join
tab_b b
on a.a_child = b.a_child
group by a.a_parent;
如果表格中有重复的行,则应使用count(distinct)
代替count()
。