繁体   English   中英

一组ID的单个更新最后一行条目-MySQL

[英]Single update last row entry for a set of IDs - MySQL

我想使用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

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

是:

 UPDATE yourtable 
 SET fk_something = 123 
 WHERE id_something=1
 ORDER BY datecreated DESC
 LIMIT 0,1
 ;
 UPDATE yourtable 
 SET fk_something = 123 
 WHERE id_something=2
 ORDER BY datecreated DESC
 LIMIT 0,1
 ;
 ...

只需将其包装在一个过程中即可简化。 (请注意,如果您要传递CSV列表作为参数,则需要使用prepare / execute)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM