当前位置:  开发笔记 > 数据库 > 正文

SQL:Exchange列值

如何解决《SQL:Exchange列值》经验,为你挑选了1个好方法。

想要清除一些关于SQL内部的概念.

假设我有一张桌子:

---------tblXY-----------
X int
Y int

现在它有以下记录:

X Y
---
1 4
2 3
3 2
4 1

我希望得到的表是:

X Y
---
4 1
3 2
2 3
1 4

所以我把查询写成:

UPDATE tblXY   
 SET [X] = Y
 ,[Y] = X

并得到了所需的结果.

但它是怎么发生的?我的意思是我将X的值设置为Y的当前值,并且在我将Y的值设置为X的时刻.



1> paxdiablo..:

这是因为操作是单个原子操作 - 在完成任何分配之前首先读取当前值XY.

所以它不是那么多:

for every row:
    set x = y
    set y = x

但更像是:

for every row:
    set tmpx = x
    set tmpy = y
    set x = tmpy
    set y = tmpx

请记住,这只是概念视图.在封面下,它可能会更有效率.

没有它,你必须自己存储每一行​​的临时,或只是重命名列:-)

推荐阅读
路人甲
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有