Добавить ячейку из двух или более строк в одну таблицу MySql - PullRequest
1 голос
/ 28 августа 2009

У меня есть 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 Ответ

1 голос
/ 28 августа 2009
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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...