我已经看到了一些有用的答案,关于使用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`;
(为伪代码道歉,但我希望你能得到我所要求的)
两者对我来说都是一样的,但实际上并没有足够大的数据集来查看速度上的任何差异。
谢谢!
答案 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
操作中存活。更不用说当有多个匹配的行时,不能保证* *分配了哪个值。