我有一个结构如下的表:它有很多重复项,我突出显示了两个重复项,以便您了解。所以我想要做的是删除所有重复项并只保留一个副本:如您所见,它是一张包含电视节目剧集的表格。如何使用 SQL 命令执行此操作?因此,基本上该命令将查找具有相同 show_id 和相同季节和剧集的行,并删除除一个之外的所有重复项(同一剧集有 3 个副本)。
截图:
您可以通过保留除具有最低 id 的记录之外的所有记录来删除重复项。在 MySQL 中,您可以使用join
on执行此操作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;
获取一个 id 列表(每个组 1 个)并从这个问题中删除所有其他内容的非常简单的解决方案:如何使用 SQL 删除重复的行?
DELETE FROM table WHERE id NOT IN
(SELECT MAX(id) FROM table GROUP BY show_id, season, episode);
您还可以让 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演示