使用SQL删除重复项

时间:2013-08-30 02:16:34

标签: mysql sql database

我有一个像这样的结构的表: 它有很多重复,我突出了两个重复,所以你可以得到一个想法。所以我想要做的是删除所有重复项并只留下一个副本:你可以看到它是一个带有电视节目剧集的表格。如何使用SQL命令执行此操作?因此,基本上该命令将查找具有相同show_id和相同季节和剧集的行,并删除除一个之外的所有重复项(有同一集的3个副本的剧集)。

THE SCREENSHOT:http://c74.img-up.net/dbdd4e.jpg

3 个答案:

答案 0 :(得分:4)

您可以通过保留除id最低的记录之外的所有记录来删除重复项。在MySQL中,您可以使用join上的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;

答案 1 :(得分:0)

获取ID列表(每组1个)并删除此问题中的所有其他内容的非常简单的解决方案:How to delete duplicate rows with SQL?

DELETE FROM table WHERE id NOT IN
(SELECT MAX(id) FROM table GROUP BY show_id, season, episode);

答案 2 :(得分:0)

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

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 演示