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

从另一个具有多个条目的表更新MYSQL,mysql,sql,sql-update,Mysql,Sql,Sql Update,我已经看到了一些关于使用MAX子查询根据时间戳使用多个值更新不同表中的表值的有用答案 e、 g 我想知道这与先执行ALTER并依靠表中的顺序来简化更新相比如何。大概是这样的: 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 `

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

e、 g

我想知道这与先执行ALTER并依靠表中的顺序来简化更新相比如何。大概是这样的:

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`;
为伪代码道歉,但我希望你明白我的要求

两者对我来说都是一样的,但是没有足够大的数据集来观察速度上的差异


谢谢

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

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尊重表的顺序,这种顺序也不会在连接操作中继续存在。更不用说,当存在多个匹配行时,无法保证为*分配*哪个*值。

永远不要依赖于表中记录的某种假定顺序。结果不会相同:在SQL中,顺序不保证,因此,将表中的数据按顺序排列并不能保证SQL语句在大多数情况下都能显示预期的结果,但有时情况并非如此:例如,如果数据已经在内存中,数据库引擎可能会决定执行与预期不同的联接顺序。谢谢!我想可能有一些原因,改变方法的答案从来没有出现过!!!谢谢我设法得到了一个非常轻微的不同版本的这个工作得很好!