1、题目
题目链接:https://leetcode.cn/problems/swap-salary/
SQL架构
Create table If Not Exists Salary (id int, name varchar(100), sex char(1), salary int)
Truncate table Salary
insert into Salary (id, name, sex, salary) values ('1', 'A', 'm', '2500')
insert into Salary (id, name, sex, salary) values ('2', 'B', 'f', '1500')
insert into Salary (id, name, sex, salary) values ('3', 'C', 'm', '5500')
insert into Salary (id, name, sex, salary) values ('4', 'D', 'f', '500')
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 语句。
查询结果如下例所示。
示例 1:
输入:
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' 。
2、自己的解法
利用if流控制函数来解决这个问题,当然也可以用其他判断
update Salary set sex = if( sex = 'm', 'f', 'm')
3、特殊的解法
使用ASCII转码在转回来,这个ASCII方法在这里,可以看看
https://dev.mysql.com/doc/refman/5.7/en/string-functions.html
update Salary set sex = char(ascii('m')+ascii('f') - ascii(sex))
4、一些拓展
这篇文章建议结合上一篇来看,主要知识点都写在上一篇了。
https://blog.youkuaiyun.com/weixin_43987277/article/details/126320453
如果你不记得如何修改语句的,就看这里吧
SQL UPDATE 语句
https://www.runoob.com/sql/sql-update.html
UPDATE table_name
SET column1=value1,column2=value2,...
WHERE some_column=some_value;