当前问题:
A的数据要insert到B中
A结果集a,b,c三个字段的值,与B表中a,b,c三个字段的值存在大量重复数据。
因为B的abc的唯一约束,导致冲突,其他正常数据无法插入到B表中。
问:求delete语句删除B中AB共存的数据。

解决方案 »

  1.   

    delete from B where exists (select * from A where A.a=B.a and A.b=B.b and A.c=B.C)
      

  2.   

    delete from B where rowid in
    select rowid from 
    (
    select b.*,row_number()over(parttiton by b.a,b.b,order by b.a,b.b) rn,rowid from B
    ) T WHERE T.RN <> 1
      

  3.   

    delete from B where rowid in(
    select rowid from  
    (
    select b.*,row_number()over(parttiton by b.a,b.b,order by b.a,b.b) rn,rowid from B
    ) T WHERE T.RN <> 1)
      

  4.   


     楼主要求的是删除B中在A表已经存在的数据,1楼是对的,2楼理解错了!
     
     delete from B where exists (select * from A where A.a=B.a and A.b=B.b and A.c=B.C)
     
      

  5.   

    delete from B where exists(select 1 from A where A.a=B.a and A.b=B.b and A.c=B.c)
      

  6.   

    这个方法已经尝试过了。但是,删不动。尝试过两次,第一次执行半小时,第二次一小时。排除回滚段和临时表空间不足的问题。
    A中数据量1200W,
    B中数据10W,重复数据3W。这样可行吗:删除A的唯一约束,让重复数据进入到A,然后对A表进行去重处理(用rowid)。然后把约束再建立上。