MySQL如何根据table1的name自动更新table2的address?
用SQL原生命令自动实现表更新
嘿,这个需求完全不需要额外写代码,直接用数据库的UPDATE JOIN语句就能自动完成!
- 核心逻辑:通过
name字段关联两张表,批量更新table2的address字段,只修改匹配到的行,不影响无匹配的记录(比如你的例子里的daniel)。
通用SQL更新语句
针对你的场景,通用的更新命令如下:
UPDATE table2 JOIN table1 ON table2.name = table1.name SET table2.address = table1.address;
针对你示例的效果说明
执行这条语句后会自动完成以下操作:
- 匹配
table2和table1中name相同的行(jhonny、david、danny) - 将
table2中这些行的address替换为table1对应的地址 - 保留
table2中没有匹配到的行(比如daniel)原数据不变
最终table2会完全符合你想要的结果:
jhonny 1st street、david 2nd street、danny 4th street、daniel 2nd street
实用提醒
- 先验证再执行! 建议先跑一条查询语句确认匹配结果,避免误更新:
SELECT table2.name, table2.address AS 原地址, table1.address AS 新地址 FROM table2 JOIN table1 ON table2.name = table1.name; - 不同数据库有细微语法差异:
- PostgreSQL写法:
UPDATE table2 SET address = table1.address FROM table1 WHERE table2.name = table1.name; - SQL Server写法:
UPDATE t2 SET t2.address = t1.address FROM table2 t2 INNER JOIN table1 t1 ON t2.name = t1.name;
- PostgreSQL写法:
内容的提问来源于stack exchange,提问作者Korenron
相关产品推荐
相关产品推荐

