在不使用第三个变量或表的情况下交换表中两列的值
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
【讨论】:
以上是关于在不使用第三个变量或表的情况下交换表中两列的值的主要内容,如果未能解决你的问题,请参考以下文章