我把discog的xml文件转换成了mysql表,现在我面临着同一首歌在不同的发行年份有很多重复的条目,这是因为像“best of”这样的发行版。
我需要一个sql查询,将删除两列'artist'和'track'为基础的行,但保留最早的'year'。。所以这张table看起来是这样的:
id | artist | track | year
-----------------------------------------------------------------
1 Some Artist Greatest Song Ever 1999
2 Some Artist Greatest Song Ever 1985
3 Some Artist Greatest Song Ever 2000
基本上我想删除所有除了一行'year'1985。
据我所知
ALTER IGNORE TABLE discog ADD UNIQUE (artist, track);
这是用来删除所有,但一个,但我不相信忽略工程与mysql的新版本。我不知道如何保持最小(年)
1条答案
按热度按时间2vuwiymt1#
您可以使用此查询删除所有重复条目,保留最早的条目:
更新
对于非常大的表,另一种更有效的解决方案是创建一个副本,使用行上的唯一索引来防止重复插入:
唯一的关键是艺术家的名字和轨道名称的组合,因此它将允许艺术家有不同的轨道和不同的艺术家有相同的轨道名称。因为
SELECT
部分查询已完成ORDER BY
年,它将首先插入具有最低年份的(艺术家、曲目、年份)组合,然后由于重复键,将不会插入其他相同的(艺术家、曲目)记录。rextester上的演示