2014-10-18 47 views
1

我想用一臺這樣的:是否可以在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現在變成空。

在此先感謝。

編輯:謝謝雷達& 2unco;有一齣戲,你也可以在同一個語句中移動多個列...

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

是的,這是可能的。但是在INSERT之後(當「jkl」/「」在記錄中時),UPDATE可以自己自己加入並且用來自先前的ID識別的行的值更新。 – user2864740 2014-10-18 01:16:27

+0

我們如何處理我們必須反向更新行的事實?即如果我們先更新id 1(並將其設置爲null),那麼id 2和3和4將全部變爲null。我們必須明確地按照相反的順序進行。或者... SQL會「一次完成」嗎? – 2014-10-18 01:21:49

+0

@ 2unco - 不確定你的意思;我想模擬MySQL表中的shift()和push()JavaScript數組方法,所以我只是插入新行;以前的行將永遠不會更新。 – Data 2014-10-18 01:34:37

回答

3

UPDATE自加入

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 ; 
+0

這應該做到這一點。 – StackOverflowed 2014-10-18 02:31:47

+0

@RADAR - 太棒了,那很棒。一個小的子問題,無論如何要將更新合併到一個查詢中嗎? – Data 2014-10-18 02:54:57

+0

是左連接應該這樣做 – radar 2014-10-18 02:56:00

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覆蓋第一排,但我們只是在這種情況下,將其設置爲空反正所以它不能有效地做任何事情。

+0

感謝您澄清空插入,沒有第二次更新,它更乾淨,但雷達擊敗了它,所以我標記爲他的答案。 – Data 2014-10-18 02:59:12

相關問題