我有一个像这样的结构的表: 它有很多重复,我突出了两个重复,所以你可以得到一个想法。所以我想要做的是删除所有重复项并只留下一个副本:你可以看到它是一个带有电视节目剧集的表格。如何使用SQL命令执行此操作?因此,基本上该命令将查找具有相同show_id和相同季节和剧集的行,并删除除一个之外的所有重复项(有同一集的3个副本的剧集)。
THE SCREENSHOT:
答案 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 ...
语法1}}约束来为您添加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 演示