msql if和case

if:

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

运行结果是更新sex,如果sex为m更新为f,否则更新为m

case:

UPDATE salary SET sex  = (CASE WHEN sex = 'm' THEN 'f' ELSE 'm' END)

结果和上面的if语句一样

主要是leetcode里面一道题要求只用一次更新语句并且没有中间临时表来实现替换表中的性别字段,自己琢磨了半天只能实现一次更新,不能不用中间临时表,就只好百度了下答案,谁知这么简单,故在此记录一下新学到的两句语句,顺便下面是我自己写的错误的sql语句:

update salary t4 INNER JOIN (
SELECT t2.id,t2.name,t1.sex,t2.salary from (
(select * from salary ORDER BY sex asc) t1
INNER JOIN
(select * from salary order by sex desc) t2
on t1.sex!=t2.sex
)GROUP BY id
)t3
on t4.id=t3.id
set t4.sex=t3.sex ;

虽然这个方法是错的,但里面也包含了我新学的把更新和查询结合起来的一种方法:

update a INNER JOIN (select * from  b)c on a.id=c.id set a.sex=c.sex;
括号内的select可以随意拼接查询直到得到你需要的值,然后通过on判断要改的元素

你可能感兴趣的:(msql if和case)