Oracle 使用一条语句删除重复数据
在大的数据库应用中,经常因为各种原因遇到重复的记录,造成数据的冗余和维护上的不便
?
?
1.用rowid方法 ?
? ?
? 2.用group ? by方法 ?
? ?
? 3.用distinct方法 ?
? ?
? ?
? ?
? 1。用rowid方法 ?
? ?
? 据据oracle带的rowid属性,进行判断,是否存在重复,语句如下: ?
? 查数据: ?
? ? ? ? ? select ? * ? from ? table1 ? a ? where ? rowid ? !=(select ? ? max(rowid) ? ? ?
? ? ? ? ? from ? table1 ? b ? where ? a.name1=b.name1 ? and ? a.name2=b.name2......) ?
? 删数据: ?
? ? ? ? delete ? ? from ? table1 ? a ? where ? rowid ? !=(select ? ? max(rowid) ? ? ?
? ? ? ? ? from ? table1 ? b ? where ? a.name1=b.name1 ? and ? a.name2=b.name2......) ?
? ?
? 2.group ? by方法 ?
? ?
? 查数据: ?
? select ? count(num), ? max(name) ? from ? student ? --列出重复的记录数,并列出他的name属性 ? ?
? group ? by ? num ? ?
? having ? count(num) ? >1 ? --按num分组后找出表中num列重复,即出现次数大于一次 ? ?
? 删数据: ?
? delete ? from ? student ? ?
? group ? by ? num ? ?
? having ? count(num) ? >1 ?
? 这样的话就把所有重复的都删除了。 ?
? ?
? 3.用distinct方法 ? -对于小的表比较有用 ?
? ?
? create ? table ? table_new ? as ? ? select ? distinct ? * ? ? from ? table1 ? minux ? ?
? truncate ? table ? table1; ?
? insert ? into ? table1 ? select ? * ? from ? table_new;
?
在SQL Server中原理是一样的.