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

时间:2019-05-22 05:53:59

标签: sql

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

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

我想交换两列

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

4 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

您可以使用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

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

在几乎所有数据库中,您都可以这样做:

update t
    set name = lastname,
        lastname = name;

标准行为是第一个分配不影响第二个分配。就我所知,唯一无法解决此问题的数据库是MySQL。