经常看到一个sql题,如何删除重复记录,我疑问,有需要这种操作的情况吗?

赵占涛 发布于 2013/12/18 22:17
阅读 389
收藏 1

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

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

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

加载中
0
Onedot
Onedot
上例中即便有唯一主键也有实际重复数据导入了
0
Onedot
Onedot
还是有实际情况发生,往往现实有数据因为外部原因导致异常,比如系统没处理好用户导入2次甚至更多次重复数据数。
0
ericsoul
ericsoul
1,程序里可以不用特别的写去重sql,用distinct取数据即可。去重可以节省内存,和复杂数据结构的开销。 2,去重可以由dba来处理,用sql。这样程序可以不用过多考虑,用map或者二叉树保障唯一也可以。 3,设计良好,有时候是说起来容易。业务在变,人为处理。还有有时候数据不是重的,只是某个程序要用的字段组合是重的而已。
0
魔力猫
魔力猫

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

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

0
lxbzmy
lxbzmy

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

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


0
w
walk_lai
这是SQL题,不是程序题,这种题一般就是考你子查询吧
0
lvzjane
lvzjane

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

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

赵占涛
赵占涛
是不是oracle的呀?别的数据库可以吗?
Arlene916
Arlene916
这个操作很巧妙,多谢啦
返回顶部
顶部