是否可以在MySQL表中向下移动列数据?

时间:2014-10-18 01:14:32

标签: mysql

我想使用这样的表:

+------+------------+-----------+
|  id  | col1       | col2      |     
+------+------------+-----------+
|  1   | abc        | mno       |
+------+------------+-----------+
|  2   | def        | pqr       |
+------+------------+-----------+
|  3   | ghi        | stu       |
+------+------------+-----------+

有没有办法添加新行并向下移动列?表应如下所示......

+------+------------+-----------+
|  id  | col1       | col2      | 
+------+------------+-----------+
|  1   | abc        |           |
+------+------------+-----------+
|  2   | def        | mno       |
+------+------------+-----------+
|  3   | ghi        | pqr       |
+------+------------+-----------+
|  4   | jkl        | stu       |
+------+------------+-----------+

使用[row4,col1] ='jkl'的单元格值插入新行,但我想向下移动col2数据,因此[row1,col2]现在变为空。

提前致谢。

编辑:谢谢RADAR& 2unco;有一个游戏,你也可以在同一个声明中移动多个列......

UPDATE mytable t1
LEFT OUTER JOIN mytable t2 ON T1.id=T2.id + 1
SET t1.col2 = t2.col2, t1.col3 = t2.col3;

2 个答案:

答案 0 :(得分:3)

使用自我加入更新

SQL小提琴http://www.sqlfiddle.com/#!2/b4f6c/1

 UPDATE Table1 T1
 JOIN Table1 T2 
 on T1.id=T2.id+1
 SET T1.col2 =T2.col2 ;

 UPDATE Table1 set col2 =NULL
 Where id=1;

编辑: 在单一陈述中

  UPDATE Table1 T1
  LEFT JOIN Table1 T2 
  on T1.id=T2.id+1
  SET T1.col2 =T2.col2 ;

答案 1 :(得分:2)

一个UPDATE可以做到:

UPDATE mytable t1
LEFT OUTER JOIN mytable t2 ON T1.id=T2.id + 1
SET t1.col2 = t2.col2;

http://sqlfiddle.com/#!2/299d1/1

我认为我们需要使用COALESCE来覆盖第一行,但我们只是在这种情况下将其设置为null,所以它实际上没有做任何事情。