Oracle中如何根据指定列的条件修改多列值?
解决SQL中根据条件修改多列值的问题
你的写法错误在于试图用单个CASE表达式同时处理多个列——SQL里每个CASE只能对应单个列的逻辑,不能一次返回多列结果。下面分两种常见场景给出正确写法:
场景1:查询时动态修改列值(不修改表数据)
给每个需要修改的列单独编写CASE判断:
SELECT CASE WHEN my_key_col LIKE '%mystring%' THEN NULL ELSE col_1 END AS col_1, CASE WHEN my_key_col LIKE '%mystring%' THEN NULL ELSE col_2 END AS col_2 FROM your_table;
每个列独立判断条件:当my_key_col包含指定文本时,返回NULL,否则保留原列值。
场景2:更新表中实际存储的数据
如果要永久修改表内数据,优先用UPDATE语句,有两种写法:
写法一(仅修改符合条件的行,高效)
直接通过WHERE定位目标行,批量设置列值:
UPDATE your_table SET col_1 = NULL, col_2 = NULL WHERE my_key_col LIKE '%mystring%';
这种方式只对符合条件的行生效,其他行的col_1和col_2保持不变。
写法二(对所有行做条件处理)
如果需要对所有行都执行逻辑判断(比如不符合条件时要设置其他值),给每个列单独加CASE:
UPDATE your_table SET col_1 = CASE WHEN my_key_col LIKE '%mystring%' THEN NULL ELSE col_1 END, col_2 = CASE WHEN my_key_col LIKE '%mystring%' THEN NULL ELSE col_2 END;
内容的提问来源于stack exchange,提问作者CAPSLOCK
相关产品推荐
相关产品推荐

