gpt4 book ai didi

mysql - 根据列数据删除重复的 MySQL 行

转载 作者:行者123 更新时间:2023-11-29 22:11:42 25 4
gpt4 key购买 nike

我有一个名为 sg 的表,其中包含以下列:
player_uuidplayer_name硬币杀死死亡胜利

但是,我遇到了一个问题,导致一些重复的行并且其中一些行被修改。所以,我想知道如何删除包含旧数据的行。也就是说...

如何删除 player_uuid 相同的重复行?但我只想删除 coinskillsdeathswins 小于重复项的行.

示例数据:http://i.stack.imgur.com/Xieod.png
在本例中,我想保留死亡人数为 46 的行并删除死亡人数为 43 的行。

最佳答案

由于数据的结构方式,未能提出单个删除语句:改为 3 个删除语句:

它的工作方式是:查找给定 UUID 是否有多行,并确定要保留哪一行(给定列的最大值),然后重新连接自身并确定哪些行不被保留保留,存储在临时表中,并从主数据表(称为 someTable)中删除该临时表中标记的所有内容。这种方法的好处是:如果您有超过 1 个重复项(3,4,5 行,直到无穷大),它们也将被删除。

CREATE TEMPORARY TABLE tempTable AS
SELECT a.player_uuid, a.kills, b.keepRow
FROM someTable a
LEFT JOIN (SELECT MAX(kills) AS kills, player_uuid, 1 AS keepRow
FROM sometable
GROUP BY player_uuid
HAVING COUNT(*)>1
) b ON a.player_uuid=b.player_uuid AND a.kills=b.kills
WHERE b.keepRow!=1;

DELETE a.* FROM someTable a, tempTable b
WHERE a.player_uuid=b.player_uuid AND a.kills=b.kills;

对其他列(winscoinsdeaths)重复此操作,将所有 kills 替换为其他列列名称。

始终先测试删除代码:)

另外:当你这样做时:

使用唯一索引来防止这种情况再次发生:

CREATE UNIQUE INDEX idx_st_nn_1 ON someTable(player_uuid);

当您尝试插入错误记录时,您的代码将返回错误。在这种情况下处理插入的最佳代码是:

INSERT INTO someTable(player_uuid,kills) VALUES ('someplayer',1000) 
ON DUPLICATE KEY UPDATE kills=1000;

还有一些帮助的是有一些时间指示器列:然后只需执行一次删除:

ALTER TABLE someTable ADD COLUMN (last_updated TIMESTAMP);

时间戳会自行更新,因此无需更改代码即可使用它。

关于mysql - 根据列数据删除重复的 MySQL 行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31576291/

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