一、题目
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' 。
来源:力扣(LeetCode)
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
二、解题思路
创建数据表
根据题意创建数据表Salary并设置数据类型,然后补充数据,完成填充
CREATE TABLE Salary(
id INT,
NAME VARCHAR(20),
sex ENUM('m','f'),
salary INT
);
INSERT INTO Salary VALUES
(1,"A","m",2500),
(2,"B","f",1500),
(3,"C","m",5500),
(4,"D","f",500);
- 表数据展示
使用SELECT 操作
这里的题意是要将m与f性别互换,可以使用case...when then end来解决这个问题,通过判断来转换
SELECT id,NAME,
(CASE
WHEN sex='m' THEN 'f'
WHEN sex='f' THEN 'm'
END) sex, salary
FROM Salary;
使用一条 update 语句,且 不能 使用 select 语句。 但是通读题意发现需要使用一条 update 语句,且不能使用 select 语句。
UPDATE语句操作
这是是用过set与if的组合使用,设置sex,判断sex互相转化,这条语句是改变数据库的
UPDATE Salary SET sex=IF(sex='m','f','m');
SELECT * FROM Salary;
这是其中的一种方式,还有另外一种方式,同样是使用case
UPDATE Salary SET sex = (
CASE sex WHEN 'm' THEN 'f' ELSE 'm' END
);
SELECT * FROM Salary;
两种方式,第一种相对效率要高些,执行速度更快
三、执行测试
if测试结果
case测试结果
四、总结
主要在于学习MySQL不同组合的语法,这个更重要一些!!!