在SQLite3数据库中识别重复行并删除它们

5

我有一张名为listed_users的表格,其中包含两个TEXT列,分别是codeusername:

code | username
-----|---------
aa   | john_doe
ab   | jane_doe
ca   | john_doe
ca   | john_doe <-- duplicate
da   | ryan_doe

我想编写一个命令,以删除重复项,例如ca | john_doe,当相同的信息在多行中两列中同时出现时。


在再次添加行之前,您应该检查行的存在...代码列可以相同,但用户不同吗? - OneCricketeer
大致上,要查找重复行的查询应该是这样的:select code, username from listed_users group by code, username having count(1) > 1 - Michael Butscher
@cricket_007 是的,一个用户可以有多个代码列出。 - John Smith
1个回答

7

要删除一对重复行中的其中一个,必须有一些机制来识别它。在SQLite中,这将是 rowid

以下查询返回所有要保留的行的rowid值,即每个唯一的代码/名称组合对应的一行:

SELECT min(rowid)
FROM listed_users
GROUP BY code, username;

您想删除不在该列表中的所有行:
DELETE FROM listed_users
WHERE rowid NOT IN (SELECT min(rowid)
                    FROM listed_users
                    GROUP BY code, username);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接