我想使用 对历史表中的一组 Id 执行更新IN(1,2,3)
。当然,表中同一个 id 的条目不止一个。对于每个 id,更新应该只在最后一个历史条目中执行。
有没有办法通过一次更新来执行此操作?
UPDATE table SET fk_something = 123 WHERE id_something IN (1,2,3) AND ...?
提前致谢。
我想使用 对历史表中的一组 Id 执行更新IN(1,2,3)
。当然,表中同一个 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)
这使用子查询来获取max(updated_at)
每个id_something
. 然后将这些行连接到您的表中,以确保您更新最新的行。
是的:
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 列表作为参数传递,则需要使用准备/执行)