1

我有一个结构如下的表:它有很多重复项,我突出显示了两个重复项,以便您了解。所以我想要做的是删除所有重复项并只保留一个副本:如您所见,它是一张包含电视节目剧集的表格。如何使用 SQL 命令执行此操作?因此,基本上该命令将查找具有相同 show_id 和相同季节和剧集的行,并删除除一个之外的所有重复项(同一剧集有 3 个副本)。

截图:http://c74.img-up.net/dbdd4e.jpg

4

3 回答 3

4

您可以通过保留除具有最低 id 的记录之外的所有记录来删除重复项。在 MySQL 中,您可以使用joinon执行此操作delete

delete t
    from <table> t left outer join
         (select min(id) as minid
          from <table t> t
          group by show_id, season, episode
         ) tokeep
         on t.id = tokeep.minid
    where tokeep.minid is null;
于 2013-08-30T02:19:48.960 回答
0

获取一个 id 列表(每个组 1 个)并从这个问题中删除所有其他内容的非常简单的解决方案:如何使用 SQL 删除重复的行?

DELETE FROM table WHERE id NOT IN
(SELECT MAX(id) FROM table GROUP BY show_id, season, episode);
于 2013-08-30T02:22:13.233 回答
0

您还可以让 MySql使用语法为您添加UNIQE约束ALTER IGNORE TABLE ...

ALTER TABLE Table1 ENGINE MyISAM; -- this obviously needed only if your ENGINE is not MyISAM
ALTER IGNORE TABLE Table1 ADD UNIQUE (`show_id`, `season`, `episode`);
ALTER TABLE Table1 ENGINE InnoDB; -- again this is only needed if your ENGINE was other than MyISAM

这是SQLFiddle演示

于 2013-08-30T03:06:43.323 回答