我已经四处寻找这个问题但是找不到一个好的答案。
我运行开发多人游戏服务器mod并且我首先在帐户数据库中犯了一个大错:区分大小写,所以如果加入了名为'bob'和'Bob'的玩家已经在数据库中,那么一个新帐户已注册(这导致了问题!)数据库上也没有'PRIMARY KEY'列。
所以现在我的数据库中有很多'bob','Bob','BOB'等重复,并且想知道是否有一种很好的方法可以清理数据库并删除这些副本。
我能想到的唯一方法是在数据库上运行一个循环,将每个名称存储在内存中(12k记录),然后再次运行它并将名称标记为“found”,然后删除已标记为“found”的记录”
无论如何,提前感谢任何帮助:)
答案 0 :(得分:0)
将结果插入另一个表中,然后就不会有重复
SELECT DISTINCT UPPER(name) FROM table
答案 1 :(得分:0)
这是使用简单的delete语句在sqlite中执行此操作的方法:
delete from test where rowid in
( select test.rowid from test
inner join (select upper(name) name, min(rowid) rowid from test group by upper(name)) t
on upper(test.name) = t.name and test.rowid <> t.rowid);
答案 2 :(得分:0)
我会将所有数据复制到新表中,忽略重复:
ALTER TABLE players RENAME TO players_old;
CREATE TABLE players (name TEXT UNIQUE NOT NULL COLLATE NOCASE, ...);
INSERT OR IGNORE INTO players SELECT * FROM players_old;
通过这种方式,您将获得一个具有唯一名称的新表和一个包含先前数据的旧表。