mysql-删除基于两列的重复项,并保留具有另一列最小值的行
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了mysql-删除基于两列的重复项,并保留具有另一列最小值的行,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1481字,纯文字阅读大概需要3分钟。
内容图文
![mysql-删除基于两列的重复项,并保留具有另一列最小值的行](/upload/InfoBanner/zyjiaocheng/888/d19f01879a964e419a32c5991e542570.jpg)
我将discog的xml文件转换为MYSQL表,现在我面临着同一首歌的许多重复条目,而且发行年份不同,这是由于发行了“ best of”之类的歌曲而发生的.
我需要一个SQL查询,该查询将删除基于“艺术家”和“曲目”两列的行,但保留最早的“年份” ..因此表如下所示:
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);
这曾经删除了所有,但删除了一个,但是我不相信IGNORE与mysql的新版本一起工作.而且我不知道如何保持MIN(年)
解决方法:
您可以使用此查询删除所有重复的条目,保留最早的条目:
DELETE d
FROM discog d
JOIN discog d1 ON d1.artist = d.artist AND d1.track = d.track AND d1.year < d.year;
更新
对于真正的大表,一种更有效的替代解决方案是创建一个副本,在行上使用UNIQUE索引以防止重复插入:
CREATE TABLE discog_copy (id INT, artist VARCHAR(50), track VARCHAR(50), year INT);
ALTER TABLE discog_copy ADD UNIQUE KEY (artist, track);
INSERT IGNORE INTO discog_copy SELECT * FROM discog ORDER BY year;
唯一键位于艺术家名称和曲目名称的组合上,因此它将允许艺术家具有不同的曲目,而不同的艺术家具有相同的曲目名称.由于查询的SELECT部分??的ORDER BY年,它将首先插入最低年份的(artist,track,year)组合,然后由于重复键而不会插入其他相同的(artist,track)记录.
内容总结
以上是互联网集市为您收集整理的mysql-删除基于两列的重复项,并保留具有另一列最小值的行全部内容,希望文章能够帮你解决mysql-删除基于两列的重复项,并保留具有另一列最小值的行所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。