我有一个MySQL数据库,我正在使用具有AIOMySQL的Discord python机器人使用它,但是我看到错误地该机器人创建了具有相同ID的重复行,但更新了值,最后这就是我想要的。我重复的行的一个示例:
因此,现在我要删除所有重复的行,但最大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()
但是当我看到数据库时,某些行被完全删除,包括最大值。
答案 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)