SQL:交换列值

标签 sql

想要澄清一些有关 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 的值。

最佳答案

这是因为这些操作是单个原子操作 - 在完成任何分配之前首先读取 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

请记住,这只是概念 View 。它可能在幕后效率更高。

如果没有这个,您就必须自己为每一行存储临时数据,或者只是重命名列:-)

关于SQL:交换列值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2190434/

相关文章:

Android sqlite 从查询中返回行数

sql - 每个左连接返回 1 个结果

sql - 基于状态变化的分组

mysql - 如何检查mysql表中多列的重复项

MySQL存储过程无法创建

c# - 过程或函数 'procname' 需要参数 '@id' ,但未提供该参数

sql - 在 SQL Server 中将年份 (aaaa) 和季度(1 到 4)转换为日期时间

mysql - 转换Mysql中的查询

sql - 搜索非索引列时的查询性能

java - ORMlite + MySQL 外键绑定(bind)