一、问题描述
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 cwhere c.Id not in( select CustomerId from Orders)
复制代码
2. CASE
update Salaryset sex=(case sex when 'm' then 'f' when 'f' then 'm' end)
复制代码
五、测试结果
评论