ОБНОВЛЕНИЕ с SUM () в MySQL - PullRequest
5 голосов
/ 17 марта 2009

Мой стол:

ID  NAME COST  PAR  P_val  S_val
1   X    5     0    1      0
1   y    5     0    2      0
1   z    5     0    0      5
2   XY   4     0    4      4

Мне нужно обновить поле PAR на SUM(S_val), сгруппированное по ID:

  • Для ID 1 PAR должно быть SUM(SVAL) WHERE ID=1
  • Для ID 2 PAR должно быть SUM(SVAL) WHERE ID=2

Ожидаемый выход:

ID  NAME COST PAR  P_val  S_val
1   X    5     5   1      0
1   y    5     5   2      0
1   z    5     5   0      5     
2   XY   4     4   4      4

Как мне UPDATE значение PAR?

Мой код:

UPDATE Table_Name SET PAR = (SELECT SUM(S_val) FROM Table_Name WHERE ID=1) 
FROM   Table_Name

Это не работает.

Ответы [ 3 ]

10 голосов
/ 17 марта 2009

К сожалению, вы не можете обновить таблицу, объединенную с самим собой в MySQL.

Вам нужно создать функцию в качестве обходного пути:

DELIMITER $$

CREATE FUNCTION `fn_get_sum`(_id INT) RETURNS int(11)
READS SQL DATA
BEGIN
      DECLARE r INT;
      SELECT  SUM(s_val)
      INTO    r
      FROM    table_name
      WHERE   id = _id;
      RETURN r;
END $$

DELIMITER ;

UPDATE  table_name
SET     par = fn_get_sum(id)
1 голос
/ 12 августа 2011
UPDATE Table_Name SET PAR = (SELECT SUM(S_val) FROM Table_Name WHERE ID=1) 
FROM   Table_Name

Проверьте письмо. удалить строку "FROM Table_Name".

ИСТИННАЯ команда:

UPDATE Table_Name SET PAR = (SELECT SUM(S_val) FROM Table_Name WHERE ID=1)
1 голос
/ 17 марта 2009

Попробуйте:

UPDATE Table_NAme SET PAR= summedValue
FROM   TAble_NAME t
JOIN (
  SELECT ID, SUM(S_val) as summedvalue 
  FROM TABLE_NAME GROUP BY ID
  ) s on t.ID = s.ID
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...