瑞星卡卡安全论坛技术交流区系统软件 请教SQL中如何如何找到重复记录 如何删除重复记录,

1   1  /  1  页   跳转

请教SQL中如何如何找到重复记录 如何删除重复记录,

请教SQL中如何如何找到重复记录 如何删除重复记录,

请教SQL中如何如何找到重复记录 如何删除重复记录,
那位教教我,,谢谢了
最后编辑2005-10-10 20:43:37
分享到:
gototop
 

其实在建表时应该设一个不允许重复值的字段的
有一种笨方法
从第一条记录起与其后的记录比较把相同的揪出来删除即可
效率会很低所以称为笨方法

哈哈
其实我不懂随便说说

gototop
 

这个也太麻烦了
gototop
 

要看你建的表结构是什么样子的,才能帮你解决。
比如说是由ID来决定还是由几个字段同时来判断是否是
重复的记录。
gototop
 

其实在建表的时候只要设置一个主键,这样的话,自然就不会有重复记录了.
如果已经有重复记录的话,可以使用SQL的查询语句,查询你想要的数据,如果有出现2条一样的话,就删除一条
个人还是推荐用设置主键的方法进行约束
gototop
 

删除的几种方法:




(1)通过建立临时表来实现



SQL>create table temp_emp as (select distinct * from employee) 
可以通过下面的语句查询重复的记录:



SQL> select * from employee;





SQL> truncate table employee; (清空employee表的数据)



SQL> insert into employee select * from temp_emp;  (再将临时表里的内容插回来)




( 2)通过唯一rowid实现删除重复记录.在Oracle中,每一条记录都有一个rowid,rowid在整个数据库中是唯一的,rowid确定了每条记录是在Oracle中的哪一个数据文件、块、行上。在重复的记录中,可能所有列的内容都相同,但rowid不会相同,所以只要确定出重复记录中那些具有最大或最小rowid的就可以了,其余全部删除。



SQL>delete from employee e2 where rowid not in (
        select max(e1.rowid) from employee e1 where



        e1.emp_id=e2.emp_id and e1.emp_name=e2.emp_name and e1.salary=e2.salary);--这里用min(rowid)也可以。




SQL>delete from employee e2 where rowid <(
        select max(e1.rowid) from employee e1 where
        e1.emp_id=e2.emp_id and e1.emp_name=e2.emp_name and



                  e1.salary=e2.salary);




(3)也是通过rowid,但效率更高。



SQL>delete from employee where rowid not in (
        select max(t1.rowid) from employee t1 group by



        t1.emp_id,t1.emp_name,t1.salary);--这里用min(rowid)也可以。


可以通过下面的语句查询重复的记录:



SQL> select * from employee;




gototop
 
1   1  /  1  页   跳转
页面顶部
Powered by Discuz!NT