选择的UPDATE--主键互换
来源:互联网 发布:裁剪图片软件 编辑:程序博客网 时间:2024/06/06 03:14
数据库:twt001
数据表:aupkey
参考文章:SQL中的CASE WHEN用法
例,有如下更新条件
工资以上的职员,工资减少%
工资在到之间的职员,工资增加%
很容易考虑的是选择执行两次UPDATE语句,如下所示
--条件
UPDATE Personnel
SET salary = salary * 0.9
WHERE salary >= 5000;
--条件
UPDATE Personnel
SET salary = salary * 1.15
WHERE salary >= 2000 AND salary < 4600;
但是事情没有想象得那么简单,假设有个人工资块。首先,按照条件,工资减少%,变成工资。接下来运行第二个SQL时候,因为这个人的工资是在到的范围之内,需增加%,最后这个人的工资结果是,不但没有减少,反而增加了。如果要是反过来执行,那么工资的人相反会变成减少工资。暂且不管这个规章是多么荒诞,如果想要一个SQL 语句实现这个功能的话,我们需要用到Case函数。代码如下:
UPDATE Personnel
SET salary = CASE WHEN salary >= 5000
THEN salary * 0.9
WHEN salary >= 2000 AND salary < 4600
THEN salary * 1.15
ELSE salary END;
这里要注意一点,最后一行的ELSE salary是必需的,要是没有这行,不符合这两个条件的人的工资将会被写成NUll,那可就大事不妙了。在Case函数中Else部分的默认值是NULL,这点是需要注意的地方。
这种方法还可以在很多地方使用,比如说变更主键这种累活。
一般情况下,要想把两条数据的Primary key,a和b交换,需要经过临时存储,拷贝,读回数据的三个过程,要是使用Case函数的话,一切都变得简单多了。
表内容及字段设置如下:
假设有如上数据,需要把主键a和b相互交换。用Case函数来实现的话,代码如下 :
UPDATE aupkeySET p_key = CASE WHEN p_key = 'a' THEN 'b' WHEN p_key = 'b' THEN 'a' ELSE p_key END WHERE p_key IN ('a', 'b');
查看表内容: 发现主键a,b已经交换
再运行一次程序,表将还原为原来的状态
1 0
- 选择的UPDATE--主键互换
- 主键的选择
- 主键的选择
- 主键的选择
- 主键的选择
- 两个选择框中国家的互换
- UPDATE的同时操作特性 列的同时互换
- UPDATE的同时操作特性 行的同时互换
- UPDATE 时主键冲突引发的思考
- mysql复合主键update的问题
- 如何选择数据库的主键
- 数据库中主键的选择和使用
- 数据库中主键的选择和使用
- 关于数据库主键选择的思考
- 关于mysql分区表主键的选择
- 设计套路:Mysql主键的选择
- 没有主键的表,hibernate怎么去update
- MySQL UPDATE时主键冲突引发的思考
- Android大图片裁剪终极解决方案 原理分析
- easyui-numberbox
- git 分支
- 请教,对数据仓库等数据类测试,有什么心得可以指点一下吗?谢谢(51Testing)
- vs 下如何调试js
- 选择的UPDATE--主键互换
- linux shell awk获得外部变量(变量传值)简介
- SQL Server 限制IP登陆(登陆触发器运用)
- 初用 ARM DS-5
- 关于myeclipse中的程序引入的包报错问题
- 用户界面(三)ImageView、ImageButton、Gallery
- sublime-text的强烈推荐插件
- NSHashTable and NSMapTable
- linux如何后台运行程序