由于一些脏数据,我有一个问题,我需要在一些字符串修改后在表中设置一些等于其兄弟列的列。
IE:
UPDATE
table
SET
column1 = column2
,column2 = column3
,column4 = column5
,column5 = SUBSTRING(column6,1,1)
,column6 = RIGHT(column6, LEN(column6) - 1)
但是这不起作用(因为这些set命令没有按顺序执行)。有没有比单独为每个分别编写子查询更好的方法呢?
答案 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。