在数据库中交换两个简单的元素

今天开始准备学习深奥的数据库了
对,没错我就是见一个爱一个

问题是这样的,在一张表中将一个属性的值互换(值只有两个)
例如性别(不包括女装小可爱)

问题链接: https://leetcode.com/problems/swap-salary

对于leetcode中的这个题来说, …

我怎么会告诉你,我看到的时候啥想法都没,直接就去了讨论区呢…
(以下解法均来自Discuss)

解法1:当前属性均为一个字符,作为字符会有他本身的ASCII码,我们将两个属性的乘积作为结果集,将除去一个值的ASCII码作为除去结果集中的一个元素,就能够得到我们需要的另外一个元素值。

这就涉及到了mysql的许多内置函数(是真的很好用)

首先涉及到的的是mysql中的字符串函数ASCII(s),
他的返回值是字符串s中的第一个字符的ASCII码。

代码: 嚯嚯嚯,因为ASCII码是个数字要再强转成字符。

1
update salary set sex= char(ASCII('m')*ASCII('f')/ASCII(sex));

但是以上解法具有他本身只能操作字符的局限性。
该局限性极为致命并且不可修复qwq

解法2:对于某假使用c++参赛的acm选手表示,if else 不好吗!
嘤,当然可以if else,某mysql高级函数if(expr,v1,v2)如是说。
if(expr,v1,v2)如果表达式成立,返回v1,否则返回v2。

代码:

1
update salary set sex = if(sex = 'm','f','m');

我测试过了,能a,但是他的速度要慢于上面的解法qwq…
有所失去就有所收获!

开始拓展 …
如果值很多怎么办,比如将成绩转化为等级。
(如果有一个switch就好了)
作为一个成熟的mysql,怎么会没有呢。

1
2
3
4
5
6
7
8
update table set col = 
CASE #故事开始的地方
WHEN expr1 THEN result1 #还行,王子和公主在一起了
WHEN expr2 THEN result2 #不太行,公主和骑士在一起了
...
WHEN exprN THEN resultN #好像更不太行了,王子和骑士在一起了
ELSE result #算了,不演了。
END

用法类似于switch,但是比switch还好用啊,哈哈哈,
我猜底层就是if else if else if else if else ?

代码:

1
2
3
4
5
update salary set sex = 
CASE
WHEN sex = 'm' THEN 'f'
WHEN sex = 'f' THEN 'm'
END;

他好像更慢了,但是他更牛逼了!

happy ..! ending ..!

return 0;