在不使用第三个变量或表的情况下交换表中两列的值

Posted

技术标签:

【中文标题】在不使用第三个变量或表的情况下交换表中两列的值【英文标题】:Swap value of two columns in a table without using third variable or a table 【发布时间】:2019-10-08 13:09:07 【问题描述】:

id name lastname
1  ab    cd
2  df    cx
3  sd    gh

我想交换两列

id name lastname
1  cd    ab
2  cx    df
3  gh    sd

【问题讨论】:

【参考方案1】:

在几乎任何数据库中,您都可以:

update t
    set name = lastname,
        lastname = name;

第一个分配不会影响第二个分配是标准行为。据我所知,唯一不起作用的数据库是 mysql

【讨论】:

【参考方案2】:

您可以根据需要简单地更改列名。为此,请执行以下步骤-

    将“名称”列重命名为“临时”列名称 将列名“LastName”重命名为“Name” 现在将“Temp”列重命名为“LastName”

【讨论】:

【参考方案3】:

您可以使用inner join update 尝试此操作。

Update t1
set t1.name = t2.lastname, t1.lastname = t1.name
from <YourTableName> t1
inner join <YourTableName> t2 on t1.Id = t2.Id

这是实现。

create table #temp (Id int, name varchar(20), lastname varchar(20))
insert into #temp values
('1', 'ab', 'cd'), (2, 'df', 'cx'), (3, 'sd', 'gh')

Update t1
set t1.name = t2.lastname, t1.lastname = t1.name
from #temp t1
inner join #temp t2 on t1.Id = t2.Id

select * from #temp

drop table #temp

更新后的输出如下。

Id  name    lastname
--------------------
1   cd     ab
2   cx     df
3   gh     sd

【讨论】:

【参考方案4】:

不必移动大量数据,创建具有所需名称的视图可能更容易:

CREATE VIEW myview AS
SELECT lastname AS name, name AS lastname
FROM   mytable

【讨论】:

以上是关于在不使用第三个变量或表的情况下交换表中两列的值的主要内容,如果未能解决你的问题,请参考以下文章

如何在不介入第三个变量的情况下实现两个数的交换

使用 Laravel 中的验证器检查两个表中两列的唯一性

没有第三个变量如何交换?

Java面试宝典_君哥讲解笔记03java基础——浮点型计算为什么会有精度丢失在不使用第三变量的情况下交换2个变量的值

MySQL在不使用表列的情况下选择两列之间的范围日期

我可以在不返回条件列的情况下进行左连接吗?