我想使用这样的表:
+------+------------+-----------+
| 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;
答案 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,所以它实际上没有做任何事情。