gpt4 book ai didi

MySQL - 更新所有记录以匹配最后一个

转载 作者:太空宇宙 更新时间:2023-11-03 11:20:46 25 4
gpt4 key购买 nike

我有一个这样的事务表

id , name , code  ,  flag 
1 , john , 1234-3, 2
2 , joe , 1111-2, 1
3 , paul , 1234-3, 3
4 , asdf , 1234-3, 3
5 , asdf , 1111-2, 5
6 , asdf , 1234-3, 8

基本上,我想要做的是获取代码的最后一个实例检查标志,并使用具有最后一个标志 num 的相同代码更新所有以前的标志。

所以在代码 1234-3 的情况下,它应该用带有标志 num 8 的代码更新所有标志在 1111-2 的情况下,它需要用 5 更新所有带有该代码的标志。

我想把它改成这张表

id , name , code  ,  flag 
1 , john , 1234-3, 8
2 , joe , 1111-2, 5
3 , paul , 1234-3, 8
4 , asdf , 1234-3, 8
5 , asdf , 1111-2, 5
6 , asdf , 1234-3, 8

如果可能的话,我想纯粹在 MySQL 中做这件事。有一个非常大的数据集。

最佳答案

UPDATE  t_transaction tu
JOIN (
SELECT tm.code, tm.flag
FROM (
SELECT code, MAX(id) AS id
FROM t_transaction
GROUP BY
code
) td
JOIN t_transaction tm
ON tm.id = td.id
) t
ON tu.code = t.code
SET tu.flag = t.flag

确保你在 (code) 上有一个索引,如果你的表是 InnoDB 并且 idPRIMARY KEY,或者在 (code, id) 上,如果你的表是 MyISAM id 不是 PRIMARY KEY

此索引将同时用于JOIN 和高效的GROUP BY

将值设置为 MAX(flag)(不是最后一个 flag):

UPDATE  t_transaction tu
JOIN (
SELECT code, MAX(flag) AS flag
FROM t_transaction
GROUP BY
code
) t
ON tu.code = t.code
SET tu.flag = t.flag

关于MySQL - 更新所有记录以匹配最后一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1073675/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com