Обновить таблицу MYSQL из нескольких строк в другой таблице - PullRequest
0 голосов
/ 09 июня 2018

Я пытаюсь обновить таблица yy из таблица xx результаты, выполнив сумму.

Например (синтаксис абстрактный):

update table_yy
  set sum_of_x_and_y = (
       (select sum(row_x) from table_xx where class_id=1)
                 +
       (select sum(row_y) from table_xx where class_id=1) )

Таблица xx

row_id   class_id   row_x   row_y
   1        1        4        5
   2        1        5        6
   3        2        6        7
   4        1        7        8

Таблица yy

class_id   sum_of_x_and_y
   1            35
   2            13

но вместо того, чтобы устанавливать class_id вручную, я бы хотел сделать что-то вроде внутреннего обновления, но я работаю с 15k + записями.

Ответы [ 2 ]

0 голосов
/ 09 июня 2018

Ваш подход в порядке.Вам просто нужен коррелированный подзапрос:

update table_yy yy
    set sum_of_x_and_y = (select sum(xx.row_x) + sum(xx.row_y)
                          from table_xx xx
                          where xx.class_id = yy.class_id
                         );

Во многих случаях это будет иметь лучшую производительность, особенно если у вас есть индекс на table_xx(class_id).

0 голосов
/ 09 июня 2018

Вот запрос, который должен выполнить работу

UPDATE table_yy, (
    SELECT class_id, SUM(table_xx.row_x + table_xx.row_y) AS sum_of_x_and_y
    FROM table_xx
    GROUP BY table_xx.class_id 
) AS table_sum
SET table_yy.sum_of_x_and_y = table_sum.sum_of_x_and_y
WHERE table_yy.class_id = table_sum.class_id
...