我想使用IN(1,2,3)对历史记录表中的一组ID执行更新。当然,表中的同一个ID有多个条目。对于每个ID,仅应在最后的历史记录条目中执行更新。

有没有办法通过一次更新来执行此操作?

UPDATE table SET fk_something = 123 WHERE id_something IN (1,2,3) AND ...?


提前致谢。

最佳答案

如果有一列确定最后日期是什么,那么可以将UPDATE与类似以下内容的子查询一起使用:

update yourtable t1
inner join
(
  select max(updated_at) MaxDate, id_something
  from yourtable
  group by id_something
) t2
  on t1.id_something = t2.id_something
  and t1.updated_at = t2.MaxDate
set t1.fk_something = 123
where t1.id_something IN (1,2,3)


请参见SQL Fiddle with Demo

这使用子查询来获取每个max(updated_at)id_something值。然后将这些行连接到表中,以确保您更新了最新的行。

关于mysql - 一组ID的单个更新最后一行条目-MySQL,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15157470/

10-14 13:01
查看更多