基于城市关联更新Table2年龄并扩展数据行的技术问询
跨表基于城市匹配生成并更新数据行的实现方案
我来帮你解决这个数据处理需求,先明确下场景和需求,再给出具体的SQL实现方案:
原数据场景
Table1
Id. Name. Age. City 1. Aaa. 20. Ccc 2. BBB. 12. Ccc
Table2(初始状态)
Id. Name. Age. City 1. FFF. . Ccc
需求概述
基于两表共有的城市Ccc,为Table2生成对应的数据行:每行的Name固定为FFF,Age值取自Table1中同城市的记录,最终得到如下预期输出:
预期输出
Id. Name. Age. City 1. FFF. 20. Ccc 2. FFF. 12. Ccc
技术方案(SQL实现)
根据需求,我们可以通过INSERT结合SELECT查询的方式来生成目标数据,下面分两种常见场景给出方案:
场景1:完全替换Table2中Ccc城市的原有数据
如果需要把Table2中原有的Ccc相关记录替换为新生成的行,先删除原有记录再插入新数据:
-- 第一步:删除Table2中城市为Ccc的旧记录 DELETE FROM Table2 WHERE City = 'Ccc'; -- 第二步:从Table1提取匹配数据,插入到Table2 INSERT INTO Table2 (Name, Age, City) SELECT 'FFF', Age, City FROM Table1 WHERE City = 'Ccc';
场景2:保留Table2其他数据,仅新增Ccc的对应行
如果Table2里还有其他城市的数据需要保留,直接执行插入语句即可:
INSERT INTO Table2 (Name, Age, City) SELECT 'FFF', Age, City FROM Table1 WHERE City = 'Ccc';
关于Id字段的补充说明
如果Table2的Id是自增主键,执行上述插入语句时不需要指定Id,数据库会自动生成连续的唯一Id(和预期输出一致);如果Id不是自增的,可以用ROW_NUMBER()函数生成序号:
INSERT INTO Table2 (Id, Name, Age, City) SELECT ROW_NUMBER() OVER (ORDER BY Age) AS Id, 'FFF', Age, City FROM Table1 WHERE City = 'Ccc';
内容的提问来源于stack exchange,提问作者vamseedharan kalyanakrishnan
相关产品推荐
相关产品推荐

