627. 变更性别

161 阅读2分钟

一、题目

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)

链接:leetcode.cn/problems/sw…

著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

二、解题思路

创建数据表

根据题意创建数据表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);
  • 表数据展示

image.png

使用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测试结果

image.png

case测试结果

image.png

四、总结

主要在于学习MySQL不同组合的语法,这个更重要一些!!!