因此,例如,我需要创建一个将材料与人相关联的报告视图。比方说属性和狗。 B和C之间没有连接
表person
表properties
表dogs
要整理资料,我的报告如下:
select a.id, a.name, count(b.*), count(c.*)
from person a
left join properties b on a.name = b.person
left join dogs c on a.name = c.person;
预期结果将是甲人拥有10头财产和20条狗。
以某种方式,这种连接完全增加了属性的数量,并说出了正确的狗的数量。如何修复联接?
答案 0 :(得分:2)
快捷方法是使用count(distinct)
:
select a.id, a.name, count(distinct b.id), count(distinct c.id)
from table_a a left join
table_b
on a.name = b.person left join
table_c c
on a.name = c.person
group by a.id, a.name;
使用横向联接或子查询可能会更快-特别是如果两个表中有很多行:
select a.id, a.name,
(select count(*)
from b
where a.name = b.person
),
(select count(*)
from c
where a.name = c.person
),
from table_a a ;
顺便说一句,如果表a
有一个id
,则应使用该表链接到其他表,而不是name
。