SQL技术求助:如何将同表中含指定值的X列替换为Y列值
问题分析与修正方案
你的SQL语句存在几个关键错误,导致无法实现需求:
- 带空格的表名未正确转义,数据库会将其识别为两个独立对象而非单个表
SET子句末尾多了逗号,触发语法报错CASE语句缺少ELSE分支,会把不满足条件的X列值强制置为NULL- 错误使用
replace(x,'x','y'),你需要的是替换为同表的Y列值,而非替换字符
以下是适配不同数据库的修正后SQL:
MySQL/MariaDB版本
UPDATE `original table` SET x = CASE WHEN INSTR(x, '123456') <> 0 THEN y ELSE x END WHERE x IN (SELECT x FROM `temp table` WHERE x_review = 1);
SQL Server版本
UPDATE [original table] SET x = CASE WHEN CHARINDEX('123456', x) <> 0 THEN y ELSE x END WHERE x IN (SELECT x FROM [temp table] WHERE x_review = 1);
Oracle版本
UPDATE "original table" SET x = CASE WHEN INSTR(x, '123456') <> 0 THEN y ELSE x END WHERE x IN (SELECT x FROM "temp table" WHERE x_review = 1);
关键说明
- 用对应数据库的转义符处理带空格的表名(MySQL反引号、SQL Server方括号、Oracle双引号)
CASE语句保留ELSE x,确保仅修改符合条件的行,其余行X值保持不变- 直接用
y替换符合条件的x值,完全匹配你的需求 - 移除了
SET子句末尾的多余逗号,修正语法错误
内容的提问来源于stack exchange,提问作者varsha k
相关产品推荐
相关产品推荐

