7
回答
经常看到一个sql题,如何删除重复记录,我疑问,有需要这种操作的情况吗?
华为云4核8G,高性能云服务器,免费试用   

经常看到一个题:如何删除表中的重复记录。

我是一个程序员,不是一个数据库管理员,程序里真的需要写这种语句吗?你们写过吗?

一个设计良好的数据库表结构可能会产生重复记录吗?

<无标签>
举报
赵占涛
发帖于5年前 7回/368阅
共有7个答案 最后回答: 5年前
还是有实际情况发生,往往现实有数据因为外部原因导致异常,比如系统没处理好用户导入2次甚至更多次重复数据数。
1,程序里可以不用特别的写去重sql,用distinct取数据即可。去重可以节省内存,和复杂数据结构的开销。 2,去重可以由dba来处理,用sql。这样程序可以不用过多考虑,用map或者二叉树保障唯一也可以。 3,设计良好,有时候是说起来容易。业务在变,人为处理。还有有时候数据不是重的,只是某个程序要用的字段组合是重的而已。

一个设计良好的数据库系统中是没有这种问题的。但是现在的很多系统设计修改并不合理,很多人都是以所谓的性能为由乱搞反规范化,拿数据库当Excel用。

我认为去重这个问题应该集中在数据批量导入的时候而不是频繁的日常业务中。如果频繁出现,那么就可能代表着数据库设计有缺陷。

一个设计良好的数据库无法支持现实的复杂性。就好比你想用身份证做主键一样(现实中由于历史原因身份证号码有个别重复现象),而且一旦你使用了身份证号码做主键你又会面对数据录入错误的问题。最后你只能选择一个自动生成的主键,在这种情况下,就会产生重复现象。

而且还有一种情况,除了主键以外的所有字段加起来才是一个码,这时候很少有人会把所有字段联合起来做唯一索引。


这个真的需要,我今天还在用。需求就是保留任意一个ID,删除其余重复ID行

SQL:delete from tablename t1 where rowid >(select min(rowid) from tablename t2 where t1.id = t2.id )

--- 共有 2 条评论 ---
赵占涛是不是oracle的呀?别的数据库可以吗? 5年前 回复
Arlene916这个操作很巧妙,多谢啦 5年前 回复
顶部