LeetCode--627. 变更性别

42 阅读1分钟

1 题目描述

Salary 表:

+-------------+----------+  
| Column Name | Type     |  
+-------------+----------+  
| id          | int      |  
| name        | varchar  |  
| sex         | ENUM     |  
| salary      | int      |  
+-------------+----------+  

id 是这个表的主键 (具有唯一值的列)
sex 这一列的值是 ENUM 类型, 只能从 ('m', 'f') 中取
本表包含公司雇员的信息

请你编写一个解决方案来交换所有的 'f''m' (即, 将所有 'f' 变为 'm', 反之亦然), 仅使用单个 update 语句, 且不产生中间临时表
注意, 你必须仅使用一条 update 语句, 且不能 使用 select 语句

2 测试用例

输入:
Salary 表:

+----+------+-----+--------+  
| 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    |  
+----+------+-----+--------+  

解释:
(1, A) 和 (3, C) 从'm' 变为'f'
(2, B) 和 (4, D) 从'f' 变为'm'

3 解题思路

  1. 使用 if 判断当前行数据的 sex, 如果是当前是 m 修改成 f, 否则修改为 m
update Salary set sex = if(sex='m', 'f', 'm');  

执行结果

+--+----+---+------+  
|id|name|sex|salary|  
+--+----+---+------+  
|1 |A   |f  |2500  |  
|2 |B   |m  |1500  |  
|3 |C   |f  |5500  |  
|4 |D   |m  |500   |  
+--+----+---+------+