SQL如何通过其他关联表的外键更新目标表指定列数据
多表关联更新Table1的实现方案
核心逻辑
通过Table2、Table3的唯一标识匹配对应的外键值,定位Table1中同时满足两个外键条件的行,即可更新目标列。
写法1:全数据库兼容的子查询写法
该写法适配所有主流关系型数据库,逻辑清晰不易出错,要求table2_unique_id和table3_unique_id为对应表的唯一键(你给出的表结构已满足该条件)。
UPDATE Table1 SET columnIWantToUpdate = '你需要更新的目标值' WHERE table2FK = (SELECT table2FK FROM Table2 WHERE table2_unique_id = @input_table2_unique_id) AND table3FK = (SELECT table3FK FROM Table3 WHERE table3_unique_id = @input_table3_unique_id);
参数说明:@input_table2_unique_id、@input_table3_unique_id替换为你拿到的两个输入参数即可。
写法2:关联更新写法(不同数据库语法略有差异)
适合需要同时关联多张表做复杂条件判断的场景,不同数据库的语法如下:
MySQL 关联更新
UPDATE Table1 t1 INNER JOIN Table2 t2 ON t1.table2FK = t2.table2FK INNER JOIN Table3 t3 ON t1.table3FK = t3.table3FK SET t1.columnIWantToUpdate = '你需要更新的目标值' WHERE t2.table2_unique_id = @input_table2_unique_id AND t3.table3_unique_id = @input_table3_unique_id;
PostgreSQL 关联更新
UPDATE Table1 t1 SET columnIWantToUpdate = '你需要更新的目标值' FROM Table2 t2, Table3 t3 WHERE t1.table2FK = t2.table2FK AND t1.table3FK = t3.table3FK AND t2.table2_unique_id = @input_table2_unique_id AND t3.table3_unique_id = @input_table3_unique_id;
SQL Server 关联更新
UPDATE t1 SET t1.columnIWantToUpdate = '你需要更新的目标值' FROM Table1 t1 INNER JOIN Table2 t2 ON t1.table2FK = t2.table2FK INNER JOIN Table3 t3 ON t1.table3FK = t3.table3FK WHERE t2.table2_unique_id = @input_table2_unique_id AND t3.table3_unique_id = @input_table3_unique_id;
注意事项
- 执行更新前建议先执行查询校验匹配行数,确认符合预期后再执行更新,避免误操作,校验语句示例:
SELECT COUNT(*) AS 匹配行数 FROM Table1 WHERE table2FK = (SELECT table2FK FROM Table2 WHERE table2_unique_id = @input_table2_unique_id) AND table3FK = (SELECT table3FK FROM Table3 WHERE table3_unique_id = @input_table3_unique_id);
- 如果你使用ORM框架或者预处理语句,将参数替换为对应框架的占位符即可,避免SQL注入风险。
内容的提问来源于stack exchange,提问作者DonalDraper
相关产品推荐
相关产品推荐

