将表列设置为兄弟列

时间:2016-11-30 23:37:16

标签: sql sql-server

由于一些脏数据,我有一个问题,我需要在一些字符串修改后在表中设置一些等于其兄弟列的列。

IE:

UPDATE 
    table
SET
    column1 = column2
    ,column2 = column3
    ,column4 = column5 
    ,column5 = SUBSTRING(column6,1,1)
    ,column6 = RIGHT(column6, LEN(column6) - 1)

但是这不起作用(因为这些set命令没有按顺序执行)。有没有比单独为每个分别编写子查询更好的方法呢?

2 个答案:

答案 0 :(得分:2)

您可以尝试使用可更新的CTE

想知道是否有一种很酷的方式 - 嗯 - 很酷吗?

WITH UpdateableCTE AS
(
    SELECT column1 
          ,column2 AS NewCol1
          ,column2
          ,column3 AS NewCol2
          ,column4
          ,column5 AS NewCol4
          ,column5
          ,SUBSTRING(column6,1,1) AS NewCol5
          ,column6
          ,RIGHT(column6, LEN(column6) - 1) AS NewCol6
    FROM YourTbl
)
UPDATE UpdateableCTE SET column1=NewCol1
                        ,column2=NewCol2
                        ,column4=NewCol4
                        ,column5=NewCol5
                        ,column6=NewCol6;

答案 1 :(得分:0)

只要你使用microsoft sql-server就行了。它们不是一个一个地执行,而是作为一个整体分配,你可以这样交换值:

UPDATE someTable SET a = b, b = a

但它不适用于mysql。