从具有多个条目的另一个表更新MYSQL

时间:2017-12-28 00:51:12

标签: mysql sql sql-update

我已经看到了一些有用的答案,关于使用MAX()子查询根据时间戳更新来自不同表的多个值的表值。

e.g。 Update another table based on latest record

我想知道这与首先执行ALTER并依赖表中的顺序来简化UPDATE相比。像这样:

ALTER TABLE `table_with_multiple_data` ORDER BY `timestamp` DESC;

UPDATE `table_with_single_data` as `t1` 
  LEFT JOIN `table_with_multiple_data` AS `t2` 
  ON `t1`.`id`=`t2`.`t1id` 
  SET `t1`.`value` = `t2`.`value`;

(为伪代码道歉,但我希望你能得到我所要求的)

两者对我来说都是一样的,但实际上并没有足够大的数据集来查看速度上的任何差异。

谢谢!

1 个答案:

答案 0 :(得分:1)

您通常会使用相关子查询:

UPDATE table_with_single_data t1
  SET t1.value = (select t2.value
                  from table_with_multiple_data t2
                  where t2.t1id = t1.id 
                  order by t2.timestamp desc
                  limit 1
                 ); 

如果你的方法正常工作,那就是偶然。即使MySQL尊重表的排序,这种排序也不会在join操作中存活。更不用说当有多个匹配的行时,不能保证* *分配了哪个值。