想要澄清一些有关 SQL 内部原理的概念。
假设我有一张 table :
---------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 的值。
最佳答案
这是因为这些操作是单个原子操作 - 在完成任何分配之前首先读取 X
和 Y
的当前值。
所以没那么多:
for every row:
set x = y
set y = x
但更像是:
for every row:
set tmpx = x
set tmpy = y
set x = tmpy
set y = tmpx
请记住,这只是概念 View 。它可能在幕后效率更高。
如果没有这个,您就必须自己为每一行存储临时数据,或者只是重命名列:-)
关于SQL:交换列值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2190434/