一、问题描述
Salary 表:
+-------------+----------+
| Column Name | Type |
+-------------+----------+
| id | int |
| name | varchar |
| sex | ENUM |
| salary | int |
+-------------+----------+
id 是这个表的主键。
sex 这一列的值是 ENUM 类型,只能从 ('m', 'f') 中取。
本表包含公司雇员的信息。
复制代码
请你编写一个 SQL 查询来交换所有的 'f'
和 'm'
(即,将所有'f'
变为 'm'
,反之亦然),仅可以使用 单个 update 语句 ,并且不能产生中间临时表。
注意,你必须仅使用一条 update
语句,且 不能 使用 select
语句。
题目链接:变更性别
二、题目要求
样例
输入:
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) sex 从 'm' 变为 'f' 。
(2, B) 和 (4, D) sex 从 'f' 变为 'm' 。
复制代码
考察
1.IF判断、CASE语句
2.建议用时10~25min
复制代码
三、问题分析
1. IF 判断
我们可以直接使用if(sex='m','f','m')
三元表达式,就是说如果sex
等于m
,那么返回f
,否则返回m
对于if
判断返回的结果直接用,update
中的set
更新一下对应的性别符号就可以了。
2. CASE 语句
对于这一题我们还可以选择
case ...
when ... then...
when ... then...
end
复制代码
这样的 case 语句进行判断,我们只需要当性别sex
等于m
对应f
字符,性别sex
等于f
对应m
字符,最后加上一个结束符号end
就可以了。
四、编码实现
1. IF 判断
select c.Name as 'Customers'
from Customers as c
where c.Id not in( select CustomerId from Orders)
复制代码
2. CASE
update Salary
set sex=
(case sex when 'm' then 'f' when 'f' then 'm' end)
复制代码
五、测试结果
评论