SQL入门问题:将同表language_id=2的description更新至language_id=1的行
解决同表跨language_id的description更新问题
嘿,别慌!你的需求很清晰——把同一张表中language_id=2的description,同步到对应product_id的language_id=1行里。先说说你原来代码里的几个小问题:
- 子查询里写错了表名(应该是
product_description而不是description) - UPDATE的语法结构不对,这种场景需要用表关联来实现,而不是你写的那种不完整的子查询写法
- 语句里的
//incomplete bit是无效语法,得删掉
下面给你针对不同数据库的正确实现方案,选你正在使用的数据库版本就行:
方案1:MySQL 写法
用UPDATE JOIN直接关联同一张表的两个实例,一个作为目标更新行,一个作为数据源:
UPDATE product_description t1 JOIN product_description t2 ON t1.product_id = t2.product_id SET t1.description = t2.description WHERE t1.language_id = 1 AND t2.language_id = 2;
方案2:SQL Server/PostgreSQL 写法
这俩数据库支持UPDATE FROM的语法,逻辑和上面一致:
UPDATE t1 SET t1.description = t2.description FROM product_description t1 INNER JOIN product_description t2 ON t1.product_id = t2.product_id WHERE t1.language_id = 1 AND t2.language_id = 2;
重要提醒!
执行更新前,一定要先跑个查询验证一下关联的行和数据是否正确,避免误操作:
SELECT t1.product_id, t1.description AS 原description, t2.description AS 要更新的description FROM product_description t1 JOIN product_description t2 ON t1.product_id = t2.product_id WHERE t1.language_id = 1 AND t2.language_id = 2;
这个查询会展示所有即将被更新的行,确认没问题再执行UPDATE语句哦!
内容的提问来源于stack exchange,提问作者Gilbert




