基于另一张表主键更新整列数据的SQL实现方案及语句验证
跨表更新字段的解决方案
嘿,我来帮你搞定这个自动同步字段的问题~首先先说说你给出的那条UPDATE语句:
UPDATE property_tb SET item_name= device_tb.device_name WHERE property_tb.id = device_tb.device_num
这条语句是不可行的,因为你没有在UPDATE操作里明确关联device_tb表,数据库根本不知道怎么把这两个表的对应记录匹配起来,执行时大概率会报“找不到device_tb表”或者语法错误。
下面给你两种靠谱的实现方式,适配大多数主流关系型数据库:
方法一:用JOIN关联更新(推荐,性能更优)
这种方式通过JOIN明确建立两个表的关联关系,是处理跨表更新最常用的方法:
MySQL/PostgreSQL 写法
UPDATE property_tb JOIN device_tb ON property_tb.id = device_tb.device_num SET property_tb.item_name = device_tb.device_name;
SQL Server 写法
SQL Server的语法稍有差异,需要用FROM子句指定关联:
UPDATE property_tb SET item_name = device_tb.device_name FROM property_tb JOIN device_tb ON property_tb.id = device_tb.device_num;
方法二:用子查询更新
如果你的场景数据量不大,也可以用子查询的方式实现,不过性能上不如JOIN:
UPDATE property_tb SET item_name = ( SELECT device_name FROM device_tb WHERE device_tb.device_num = property_tb.id );
小提示:如果property_tb里存在某些id在device_tb中没有对应记录的情况,上面的语句会把这些记录的item_name改成NULL。要是你想保留原来的占位符,可以加个过滤条件:
UPDATE property_tb SET item_name = ( SELECT device_name FROM device_tb WHERE device_tb.device_num = property_tb.id ) WHERE EXISTS ( SELECT 1 FROM device_tb WHERE device_tb.device_num = property_tb.id );
用上面任意一种方法,都能自动把device_tb中对应的device_name同步到property_tb的item_name字段里,完全不用手动输入~
内容的提问来源于stack exchange,提问作者Grace
相关产品推荐
相关产品推荐

