订阅更新

一条 UPDATE 交换性别字段

SQL 实战 123 题 · 第 46 题 简单 约 2 分钟读完

LeetCode 627 · UPDATE + CASE、单语句修改

本文目录
  1. 面试怎么回答
  2. 题意
  3. 表结构
  4. 思路
  5. 参考解法
  6. 易错点

面试怎么回答

一条 UPDATE 加 CASE:sex = CASE sex WHEN 'm' THEN 'f' WHEN 'f' THEN 'm' ELSE sex END。同一条语句里每行只按原值计算一次,所以不会出现两步更新互相覆盖的问题。

先把这段讲顺;面试官追问时,再展开下面的原理和细节。

详细讲解

题意

工资表里有性别字段,取值 m 或 f。只用一条 UPDATE 语句,把所有 m 改成 f、所有 f 改成 m。

表结构

  • salary:id(主键)、name、sex(m / f)、salary

思路

如果写两条 UPDATE(先 m 改 f,再 f 改 m),第二条会把刚改过的也改回去。一条 UPDATE 里用 CASE 根据原值决定新值,每行只改一次,就不会互相影响。

参考解法

UPDATE salary
SET
    sex = CASE sex
        WHEN 'm' THEN 'f'
        ELSE 'm'
    END;

易错点

  • 分两步更新会把所有值都变成同一个。
  • ELSE 'm' 会把 m、f 以外的异常值也改成 m;更严谨的写法是 WHEN 'f' THEN 'm' ELSE sex。
刷题进度保存在当前浏览器