SQL技术需求:从关联表T2更新T1的start_year与end_year为MIN/MAX值
解决方案:关联聚合后的T2数据更新T1年份字段
嘿,这事儿不难,我来给你捋清楚怎么实现这个需求!核心思路是先对T2按make_id分组计算出每个品牌的最早开始年份和最晚结束年份,再把这个聚合结果和T1关联,完成字段更新。
通用SQL写法(适用于MySQL等支持JOIN的UPDATE语法的数据库)
UPDATE T1 JOIN ( SELECT make_id, MIN(start_year) AS min_start, MAX(end_year) AS max_end FROM T2 GROUP BY make_id ) AS T2_agg ON T1.make_id = T2_agg.make_id SET T1.start_year = T2_agg.min_start, T1.end_year = T2_agg.max_end;
PostgreSQL专属写法
如果你用的是PostgreSQL,语法会稍有不同,需要用FROM子句关联聚合结果:
UPDATE T1 SET start_year = T2_agg.min_start, end_year = T2_agg.max_end FROM ( SELECT make_id, MIN(start_year) AS min_start, MAX(end_year) AS max_end FROM T2 GROUP BY make_id ) AS T2_agg WHERE T1.make_id = T2_agg.make_id;
语句说明
- 子查询
T2_agg:对T2按make_id分组,用MIN()和MAX()函数分别计算每个品牌的最小start_year和最大end_year - 关联匹配:通过
make_id将T1和聚合后的T2结果关联,确保只更新匹配的记录 - 更新字段:用
SET子句把T1的对应字段替换成聚合得到的最值
按照这个语句执行后,就能得到你预期的结果:
- 1 Abarth 2014 NULL
- 2 AC 1990 2001
- 3 Acura 1996 NULL
内容的提问来源于stack exchange,提问作者Csaba
相关产品推荐
相关产品推荐

