从另一个表中的多行更新mysql表

fjnneemd  于 2021-06-21  发布在  Mysql
关注(0)|答案(2)|浏览(280)

我正在尝试通过sum从表xx结果更新表yy。
例如(语法是抽象的):

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

但是我不想手动设置类的id,我想做一些类似于内部连接更新的事情,但是我正在处理15k+的记录。

tvz2xvvm

tvz2xvvm1#

你的方法很好。您只需要一个相关的子查询:

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) .

lymgl2op

lymgl2op2#

这里有一个查询应该可以完成这项工作

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

相关问题