【问题标题】: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

【问题讨论】:

    标签: sql


    【解决方案1】:

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

    update t
        set name = lastname,
            lastname = name;
    

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

    【讨论】:

      【解决方案2】:

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

      1. 将“名称”列重命名为“临时”列名称
      2. 将列名“LastName”重命名为“Name”
      3. 现在将“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
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2014-12-04
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多