2009-08-27 72 views
1

我有X行的列值的,「只」想在一起添加和更新最大行數和零出其他價值:由兩個或兩個以上行添加單元格在同一個MySQL表

SELECT rowId, addCol FROM table WHERE rowId=1 OR rowId=2 

ROWID | ADDCOL
      | 100
      | 200
      | 67

這是那種我想要的(我知道這是完全錯誤的),但不知道怎麼表達吧!

UPDATE table SET addCol3=addCol1+addCol2+addCol3, addCol1=0, addCol2=0 

ROWID | ADDCOL
      | 0
      | 0
      | 367

回答

1
UPDATE table t1 
JOIN table t2 ON (t1.rowId > t2.rowId) 
LEFT OUTER JOIN table t3 ON (t1.rowId < t3.rowId) 
SET t1.addCol = t1.addCol + t2.addCol, 
    t2.addCol = 0 
WHERE t3.rowId IS NULL; 

說明:任何SQL表達式引用多行應該用JOIN來完成。在這種情況下,我們希望t1是任何其他行中沒有更大的rowId的行。如果t1具有最大的rowId,這意味着t3將找不到匹配的行,因此t3將爲NULL。

現在我們知道t1具有最大rowId,匹配到所有其他行(t2)具有較小rowId。在將其添加到t1的累計總數後,將t2值清零。

+0

有沒有一種快速的方式來測試這將做什麼而不實際更新表的結果? – 2009-08-28 01:56:53

+0

這是按照我所描述的方式工作,但它更新了表中的所有行,而不是選擇特定的行,我已經擴展了它,並且完美地工作,謝謝! – 2009-08-28 02:28:10

相關問題