从python中删除除最大值以外的所有重复行

时间:2018-09-04 21:27:31

标签: python mysql sql

我有一个MySQL数据库,我正在使用具有AIOMySQL的Discord python机器人使用它,但是我看到错误地该机器人创建了具有相同ID的重复行,但更新了值,最后这就是我想要的。我重复的行的一个示例:

duplicated rows

因此,现在我要删除所有重复的行,但最大XP除外。

我先进行了备份,然后尝试将所有ID(列表中已经存在的ID)保存在列表中。然后,为每个ID删除除最大值以外的所有ID。像下面的代码一样:

await cur.execute("SELECT ID FROM USUARIOS;")
r = await cur.fetchall()
uslist = []
for a in r:
    for b in a:
        if b in uslist:
            pass
        elif b not in uslist:
            uslist.append(b)
for user in uslist:
    await cur.execute("SELECT * FROM USUARIOS WHERE ID = {} ORDER BY XP LIMIT 1;".format(user))
    r = await cur.fetchone()
    uid = r[0]
    print(uid)
    xp = r[1]
    await cur.execute("DELETE FROM USUARIOS WHERE ID = {} and xp != {};".format(uid, xp))
    await conn.commit()

但是当我看到数据库时,某些行被完全删除,包括最大值。

1 个答案:

答案 0 :(得分:1)

假设您要在MySQL中执行此操作:

SELECT * FROM table WHERE XP <> (SELECT MAX(XP) FROM table) GROUP BY ID, XP, GC
UNION
SELECT * FROM table WHERE XP = (SELECT MAX(XP) FROM table)