SQL Server跨表操作:统计个体表关联数并更新家庭表total_ind字段
实现方案
推荐写法(UPDATE + 关联子查询)
SQL Server支持UPDATE语句关联多表操作,写法如下:
UPDATE f SET f.total_ind = ISNULL(i.person_count, 0) FROM family f LEFT JOIN ( -- 统计每个家庭关联的个体数量 SELECT Family_ID, COUNT(1) AS person_count FROM individual GROUP BY Family_ID ) i ON f.id = i.Family_ID
逻辑说明
- 内层子查询对individual表按Family_ID分组,统计每个家庭的总人数
- 用LEFT JOIN关联family表和统计结果,保证没有关联个体的家庭也会被更新
- ISNULL函数将无成员家庭的total_ind赋值为0,若不需要保留无成员家庭的NULL值,可以去掉ISNULL、将LEFT JOIN改为INNER JOIN
验证建议
执行更新前可以先运行以下查询确认统计结果是否符合预期,避免误操作:
SELECT f.id AS 家庭ID, ISNULL(i.person_count, 0) AS 统计个体数, f.total_ind AS 原有字段值 FROM family f LEFT JOIN ( SELECT Family_ID, COUNT(1) AS person_count FROM individual GROUP BY Family_ID ) i ON f.id = i.Family_ID
内容的提问来源于stack exchange,提问作者Roza
相关产品推荐
相关产品推荐

