首页 > 解决方案 > 查询table1的所有列left join和table2的count

问题描述

我无法让这个查询工作:

不工作

select 
    Region.*, count(secteur.*) count 
from  
    Region 
left join 
    secteur on secteur.region_id = Region.id

我找到的解决方案是这样,但是有没有更好的使用连接的解决方案,或者这不会影响性能,因为我有一个非常大的数据集,大约 500K 行

工作但害怕性能问题

select 
    Region.*,
    (select count(*) 
     from Secteur 
     where Secteur.Region_id = region.id) count 
from  
    Region 

标签: sqlsql-serverselectsql-server-2012count

解决方案


我会建议:

select region.*, count(secteur.region_id) as count
from region left join secteur on region.id = secteur.region_id
group by region.id, region.field2, region.field3....

请注意,这count(table.field)忽略空值,而count(*)将包括它们。


或者,在子查询上左连接并用于coalesce避免空值:

select region.*, coalesce(t.c, 0) as count
from region left join 
(select region_id, count(*) as c from secteur group by region_id) t on region.id = t.region_id

推荐阅读