持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第30天,点击查看活动详情
leetcode刷题627-变更性别
前文
本文内容为leetcode数据库类型刷题题目,主要是对于数据库表更新相关内容的考察。本文的解法主要是个人的解题思路,不是最佳的解题方案。本题目的题目序号为627,题目链接为leetcode.cn/problems/sw…
题目信息
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 语句。
题目分析
根据题目的要求,我们需要对已知的表进行数据变更操作处理。将表中所有性别为男的信息变更为性别女,将所有性别为女的记录变更为性别男。很明显,该题目主要是对于数据库更新语句的考察。题目的信息来说,当前字段共有两种情况。很明显,我们不能简单的利用update和where组合的方式完成当前题目的解答。由于题目中主要是通过不同的条件处理得到不同的结果,因此该题目容易联想到采用case when的方式来处理。当条件为女时将其设置为男,条件为男时将其设置为女。通过不同条件下处理成不同的解决方案,实现表中男女性别之间的互换。本题目考察的核心主要是不同条件下的数据处理。当然,我们还有另一种方式解题,也就是利用两个字母对应的ascii码之间的关系进行解决,是一种更简单的方案。至此,本题目解答完毕。
解题答案
UPDATE salary
SET
sex = CASE sex
WHEN 'm' THEN 'f'
ELSE 'm'
END;
后记
- 千古兴亡多少事?悠悠。不尽长江滚滚流。