如何基于外键复制SQL列?解决INSERT查询报错问题
修正方案:用UPDATE关联表更新而非INSERT
你要做的是更新table1中已有行的sourceId列,而非插入新行,所以应该使用UPDATE语句结合表关联来实现,以下是两种可行写法:
方法1:使用JOIN语法(推荐,效率更高)
适用于MySQL、PostgreSQL、SQL Server等主流数据库:
UPDATE table1 JOIN table2 ON table1.productId = table2.id SET table1.sourceId = table2.sourceId;
方法2:使用子查询(兼容更多数据库)
如果你的数据库不支持UPDATE JOIN,可以用子查询方式:
UPDATE table1 SET sourceId = ( SELECT sourceId FROM table2 WHERE table2.id = table1.productId ) -- 加上WHERE EXISTS避免更新没有匹配的行(可选,根据需求调整) WHERE EXISTS ( SELECT 1 FROM table2 WHERE table2.id = table1.productId );
为什么之前的写法出错?
- 第一个
INSERT语句错误:INSERT是向table1添加全新的行,此时table1中还不存在对应productId的行,WHERE子句无法引用table1的列;而且你的需求是更新已有行,不是插入新行。 - 第二个错误:当你在FROM中加入table1,
INSERT INTO table1如果不指定具体列,需要提供table1所有列的值,但你只选择了两个列,导致列数不匹配。
内容的提问来源于stack exchange,提问作者Konrád Krajíc
相关产品推荐
相关产品推荐

