前言
本文记录LeetCode - 627. 交换薪水(Swap Salary)问题。
问题描述
给出一张名为salary的SQL table(如下所示),其中,m=male,f=female。请你仅使用一条UPDATE查询语句(不建立临时表)交换f与m的值(即将所有的f都变成m,m变成f)。
比如有这样一张SQL表:
| id | name | sex | salary |
|----|------|-----|--------|
| 1  | A    | m   | 2500   |
| 2  | B    | f   | 1500   |
| 3  | C    | m   | 5500   |
| 4  | D    | f   | 500    |
执行完查询语句后,该表变为:
| id | name | sex | salary |
|----|------|-----|--------|
| 1  | A    | f   | 2500   |
| 2  | B    | m   | 1500   |
| 3  | C    | f   | 5500   |
| 4  | D    | m   | 500    |
问题解法
这是一道简单的SQL题目。更新SQL表使用UPDATE查询,而交换性别值(字符串)则可以使用IF函数完成,其语法格式如下所示。
IF(expr1, expr2, expr3)
expr1 == true ? expr2 : expr3
注:
IF函数语法说明
UPDATE salary
SET sex = IF(sex = "m", "f", "m");
代码清单:
SQL查询语句(IF函数)
拓展延伸
IF函数虽然简单好用,但是只能处理两种情况,对于多种(大于2)选项情况的查询,就可以考虑使用CASE...WHEN结构。比如这道题,可以改写成CASE...WHEN结构。
UPDATE salary
SET sex =
CASE
    WHEN sex = "m" THEN "f"
    WHEN sex = "f" THEN "m"
END;
代码清单:
SQL查询语句(CASE...WHEN结构)
参考资料
- SegmentFault专栏:https://segmentfault.com/a/1190000009676728