SQL中如何用单条语句按相同或不同条件更新多列数据?
两类更新场景都可以通过单条SQL语句实现,具体实现方式如下:
场景1:多列待替换值相同
可以直接使用标准SQL中的NULLIF函数简化写法,该函数会判断第一个参数和第二个参数是否相等,相等则返回NULL,否则返回第一个参数的值,天然适配同值替换的需求:
UPDATE table_name SET col1 = NULLIF(col1, -99), col2 = NULLIF(col2, -99) -- 加WHERE条件过滤无匹配值的行,避免全表扫描提升执行效率 WHERE col1 = -99 OR col2 = -99;
执行后原值不为-99的列会保留原有数据,不会被误修改。
场景2:各列更新条件不同
针对不同列有不同更新规则的场景,使用CASE WHEN语法为每列单独写判断逻辑即可:
UPDATE table_name SET col1 = CASE WHEN col1 = -99 THEN NULL ELSE col1 END, col2 = CASE WHEN col2 = 5 THEN NULL ELSE col2 END -- 同样加过滤条件,只更新存在符合规则的行 WHERE col1 = -99 OR col2 = 5;
以上两种写法都是标准SQL语法,兼容MySQL、PostgreSQL、Oracle、SQL Server等所有主流关系型数据库。
内容的提问来源于stack exchange,提问作者Saketh Naidu
相关产品推荐
相关产品推荐

