【发布时间】:2018-12-09 14:53:03
【问题描述】:
我遇到了一个问题,即以某种方式重复的行已进入数据库,其中某个列是重复的。我做了一些研究,发现像 this one 这样的帖子,除了删除重复的行之外的所有行。
我的表结构是这样的:
id | hints |
208 episode=1&season=1&show=Name1
209 episode=1&season=1&show=Name1
210 episode=1&season=2&show=Name1
211 episode=1&season=2&show=Name1
212 episode=3&season=3&show=Name2
如您所见,行 ID 208 和 209 是彼此重复的,而 210 和 211 也是彼此重复的。但是,212 存在并且与任何其他行都不重复。
我已经能够通过运行以下查询来识别重复项:
SELECT id, hints FROM media_items GROUP BY hints HAVING count(*) > 1;
我的表有 21097 行,上面的查询返回 2309 个重复项。如果我运行从上面的链接获得的以下查询,除了 2309 个重复项之外的所有行都将被删除,这与我想要做的相反。
DELETE from media_items
WHERE rowid NOT IN (
SELECT min(rowid) FROM media_items GROUP BY hints HAVING count(*) > 1
);
我认为该解决方案在技术上适用于提出此问题的用户,因为他们不需要保留一些不包含重复项的行。
我还尝试了以下查询,这对我来说很有意义(我显然误解了),但它一次只删除 1 行,如果我煞费苦心地运行它,我有重复的次数 (2309) ,它实际上更进一步并开始删除非重复项。
DELETE FROM 'media_items'
WHERE id = (
SELECT MIN(id) FROM 'media_items' GROUP BY hints HAVING COUNT(*) > 1
);
这可能吗?
【问题讨论】: