在同一个MySql表中添加两行或更多行的单元格

时间:2009-08-27 23:46:17

标签: mysql

我有x行的列值,并且“只是”想要将它们一起添加并更新最高行号并将其他值清零:

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

rowId |的 ADDCOL
1 | 100个
2 | 200个
3 | 67

这就是我想要的东西(我知道这完全错了)但不知道如何表达它!

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

rowId |的 ADDCOL
1 | 0
2 | 0
3 | 367

1 个答案:

答案 0 :(得分: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较小。将t2值添加到t1中的累计总数后,将其归零。