题目地址:https://leetcode-cn.com/problems/swap-salary/
给定一个salary表,如下所示,有 m = 男性 和 f = 女性 的值。交换所有的 f 和 m 值(例如,将所有 f 值更改为 m,反之亦然)。 要求只使用一个更新(Update)语句,并且没有中间的临时表。 注意,您必只能写一个 Update 语句,请不要编写任何 Select 语句。 例如:
| id | name | sex | salary |
|----|------|-----|--------|
| 1 | A | m | 2500 |
| 2 | B | f | 1500 |
| 3 | C | m | 5500 |
| 4 | D | f | 500 |
https://leetcode-cn.com/problems/swap-salary/
运行你所编写的更新语句之后,将会得到以下表:
| id | name | sex | salary |
|----|------|-----|--------|
| 1 | A | f | 2500 |
| 2 | B | m | 1500 |
| 3 | C | f | 5500 |
| 4 | D | m | 500 |
https://leetcode-cn.com/problems/swap-salary/
update salary set sex = if(sex = 'f','m','f')
update salary set sex = case when sex = 'f' then 'm' else 'f'end
update salary set sex = char(ascii('m') + ascii('f') - ascii(sex));
//f:70,0b 0100 0110
//m:77,0b 0100 1101
//
//后四位异或得到 0b 1011,再用结果异或就还原了
update salary set sex = char(ascii(sex)^0xb)
这是一道sql题,前两个方法是可以很容易想到的。但是后面两个需要对char和ascii这两个比较少见的函数有一定的理解
然后,最后一个题的一个知识点,两个数的抑或与其中任何一个数抑或都能得到另一个数,这个比较浅显易懂的知识点可能比较容易遗忘。
为什么sql题也要做,因为之前面试的时候确确实实考过sql题。