噩梦-删除重复记录
作者:asky 日期:2006-12-04
周末,在噩梦中度过。
很多人都经历过这样的噩梦吧?数据库中多条记录中某个字段的值重复了——理论上讲,如果数据库设计合理,或者程序足够完美,是不会出现的——现在要删除重复的记录并只保留其中ID最小的一条。
distinct? 它是排除完全一致的记录的,可我们遇到的是仅一个字段重复;
建临时表,查询旧表的记录是否在临时表中存在,不存在则将旧表的记录复制到临时表。嗯~~~似乎是个好办法,但是,,,,问题在于数据库中这条表的记录有......10万条,这样下去,会等死人的;
group by ... having count(...)...? 我晕倒,重复的记录的确是查找出来了,很好,好象有希望了,但是,我不能全部delete,还要保留一条啊~ select ... from ... where ... not in( select ...from ... group by ... having....).....????? 不行啊老大,用in也会死人的;
...
整个周末啊,没解决的问题就会整天想着,吃饭也想,走路也想,当然,没那么厉害可以边走路边想SQL语句,只是在想着还有问题没搞定,于是就干啥都没心情了,郁闷了。
最终解决:
在Access中,复制表bb,仅复制表结构,不复制数据,得到新表gg
在SQL企业管理器中,导入数据,源选择Access中的旧表bb
导入数据,源选择Access中的新表gg
改造新表gg的结构,将重复字段的索引加上,定义为“唯一的索引”,并“忽略重复项”
insert into gg select * from bb
执行
报错“重复的记录被忽略”
哈哈哈哈哈,,,,,我得意的笑....... 再将SQL的表导出到Access。
噩梦结束。
很多人都经历过这样的噩梦吧?数据库中多条记录中某个字段的值重复了——理论上讲,如果数据库设计合理,或者程序足够完美,是不会出现的——现在要删除重复的记录并只保留其中ID最小的一条。
distinct? 它是排除完全一致的记录的,可我们遇到的是仅一个字段重复;
建临时表,查询旧表的记录是否在临时表中存在,不存在则将旧表的记录复制到临时表。嗯~~~似乎是个好办法,但是,,,,问题在于数据库中这条表的记录有......10万条,这样下去,会等死人的;
group by ... having count(...)...? 我晕倒,重复的记录的确是查找出来了,很好,好象有希望了,但是,我不能全部delete,还要保留一条啊~ select ... from ... where ... not in( select ...from ... group by ... having....).....????? 不行啊老大,用in也会死人的;
...
整个周末啊,没解决的问题就会整天想着,吃饭也想,走路也想,当然,没那么厉害可以边走路边想SQL语句,只是在想着还有问题没搞定,于是就干啥都没心情了,郁闷了。
最终解决:
在Access中,复制表bb,仅复制表结构,不复制数据,得到新表gg
在SQL企业管理器中,导入数据,源选择Access中的旧表bb
导入数据,源选择Access中的新表gg
改造新表gg的结构,将重复字段的索引加上,定义为“唯一的索引”,并“忽略重复项”
insert into gg select * from bb
执行
报错“重复的记录被忽略”
哈哈哈哈哈,,,,,我得意的笑....... 再将SQL的表导出到Access。
噩梦结束。
评论: 1 | 引用: 5 | 查看次数: 5721
回复ACCESS人[2007-12-06 10:52 AM | ]
没必要这么麻烦的,思路是对的,但全部过程可以在ACCESS中完成。
发表评论
你没有权限发表评论!