精华内容
下载资源
问答
  • 主要介绍了Oracle删除重复数据,Oracle数据去重复,需要的朋友可以参考下
  • ORACLE删除重复数据

    2012-12-29 17:00:11
    ORACLE删除重复数据
  • Oracle Minus 关键字 SQL中的MINUS关键字 SQL中有一个MINUS关键字,它运用在两个SQL语句上,简单来说,就是找到第一个SQL语句的结果中有且 ...删除完全重复记录 delete from sendbill_header where rowid in ...

    Oracle Minus 关键字
    SQL中的MINUS关键字
    SQL中有一个MINUS关键字,它运用在两个SQL语句上,简单来说,就是找到第一个SQL语句的结果中有且
    第二个SQL语句结果中没有的记录,其语法如下:
    [SQL Segment 1]
    MINUS
    [SQL Segment 2]

    删除完全重复记录
    delete from sendbill_header where rowid in
            (select rowid from sendbill_header
            minus
            select max(rowid) from sendbill_header
            group by no,filename);
           
    delete from sendbill_lines where rowid in
            (select rowid from sendbill_lines
            minus
            select max(rowid) from sendbill_lines
            group by  headerno,mtlno,version,qty);

    可以体会下minus的作用,对比union
    create table A(
        a   number
    );
    create table B(
        b   number
    );
    insert into a values(1);
    insert into a values(2);
    insert into a values(3);
    insert into a values(4);
    insert into a values(5);
    insert into b values(4);
    insert into b values(5);
    insert into b values(6);
    insert into b values(7);
    insert into b values(8);
    select * from a;
    select * from b;
    select * from a minus select * from b;
    select * from b minus select * from a;
    select * from a union select * from b;

    展开全文
  • oracle 删除重复数据

    2020-09-11 08:55:24
    我们可能会出现这种情况,表里面的数据重复,那么,如何对重复数据进行删除呢?
  • oracle删除重复数据方法。希望对大家有用。谢谢!
  • oracle删除重复数据

    千次阅读 2010-08-11 15:58:00
    oracle删除重复数据

     

    //删除重复数据

    delete

      from MT_PL_MATERIALCONFIG

     where mt_pl_materialconfig_id in

           (select mt_pl_materialconfig_id

              from (select max(a.mt_pl_materialconfig_id) as mt_pl_materialconfig_id,

                           a.ys_materialid,

                           a.leafblendno

                      from MT_PL_MATERIALCONFIG a

                      join (select g.ys_materialid, g.leafblendno

                             from MT_PL_MATERIALCONFIG g

                            group by g.ys_materialid, g.leafblendno

                           having count(*) > 1) b on a.ys_materialid =

                                                     b.YS_MATERIALID

                                                 and a.leafblendno =

                                                     b.leafblendno

                     group by a.ys_materialid, a.leafblendno) x)

     

     

     

    依据分组条件来删除

    展开全文
  • Oracle数据库删除重复数据

    万次阅读 2018-09-04 00:01:49
    Oracle数据库中如何删除重复数据。 第一种情况:部分字段重复数据的删除 先查询出那些数据是重复的: select 字段1 ,字段2 ,count(*) from 表名 group by 字段1 ,字段2 having count(*) &gt...

    Oracle数据库中如何删除重复数据。

    第一种情况:部分字段重复数据的删除

    先查询出那些数据是重复的:

    select 
     字段1
    ,字段2
    ,count(*) 
    from 表名
    group by 
       字段1
       ,字段2 
       having count(*) > 1;

    将上面的大于>号改为等于=号就可以查询出没有重复的数据了。

    删除这些重复的数据,可以使用下面语句进行删除

    delete  from 表名 a where 字段1,字段2 
             in
    (select 字段1,字段2,count(*) 
             from 表名
             group by 字段1,字段2 
             having count(*) > 1)

    备注:该查询语句非常简单,就是将查询到的数据删除掉。不过这种删除执行的效率非常低,对于大数据量来说,会对数据库造成大的压力,不建议使用。

    可以先将查询到的重复的数据插入到一个临时表中,然后再进行删除,
    这样,执行删除的时候就不用再进行一次查询了。步骤如下:

    1、建立临时表,并将查询到的数据插入临时表。
    CREATE TABLE 临时表test_temp AS
        (select 字段1,字段2,count(*) 
                  from 表名 
                  group by 字段1,字段2 
                  having count(*) > 1);
    
    
    
    2、进行删除操作
    
    delete from 表名 a where 字段1,字段2 
         in
       (select 字段1,字段2 from 临时表test_table);
    
    3、这种先建临时表再进行删除的操作要比直接用一条语句进行删除要高效得多。 

    但执行这语句,相当于把所有重复的全都删除吗?若想保留重复数据中最新的一条记录!用如下方法。
    在Oracle中,有个隐藏了自动rowid,里面给每条记录一个唯一的rowid,
    想保留最新的一条记录, 就可以利用这个字段,
    保留重复数据中rowid最大的一条记录就可以了。

    下面是查询重复数据的一个例子:

    select a.rowid,a.* from 表名 a 
    where a.rowid != 
               (
          select max(b.rowid) 
           from 表名 b 
                where 
                    a.字段1 = b.字段1 
                    and  a.字段2 = b.字段2 
                 );

    解析:上面括号中的子查询语句是查询出重复数据中rowid最大的一条记录。

    而外面就是查询出除了rowid最大之外的其他重复的数据了。

    所以我们要删除重复数据,只保留最新的一条数据,就可以这样写了:

    delete from 表名 a where a.rowid != 
               (
              select max(b.rowid) 
              from 表名 b 
             where a.字段1 = b.字段1  
               and a.字段2 = b.字段2 
                );

    备注:这种语句的执行效率是很低的,可以考虑建立临时表,将需要判断重复的字段、rowid插入临时表中,
    然后删除的时候在进行比较。步骤如下:

    1、建立临时表test_table,记录重复的数据
    create table 临时表test_table  as 
             select a.字段1,a.字段2,MAX(a.ROWID) dataid 
             from 正式表 a 
             GROUP BY a.字段1,a.字段2;
    
    2、删除重复数据
    delete from 表名 a 
    where a.rowid != 
        (
         select b.dataid 
         from 临时表 b 
          where a.字段1 = b.字段1
           and a.字段2 = b.字段2 
         );
    
    3、提交
    commit;

    第二种情况:对于完全重复数据的的删除

    对于表中两行记录完全一样的情况
    可以将查询的记录放到临时表中,然后再将原来的表记录删除,最后将临时表的数据导回原来的表中。如下:

    1、查询去重数据放到临时表
    
    CREATE TABLE 临时表 AS (select distinct * from 表名);
    
    2、delete重复的正式表
    
    delete from   正式表;
    
    3、去重后的临时表数据插入新的正式表
    insert into 正式表 
      (select * from 临时表);
    
    4、drop临时表  
    drop table 临时表;
    展开全文
  • Oracle 怎么删除重复数据

    千次阅读 2017-10-10 13:51:02
    1、根据rowid来查询重复数据select * from table1 a where rowid !...from table1 b where a.name1=b.name1 )2、根据rowid来删除重复数据delete from table1 a where rowid !=(select max(rowid) from table1 b where

    1、根据rowid来查询重复数据

    select * from table1 a where rowid !=(select max(rowid) 
    from table1 b where a.name1=b.name1 )

    2、根据rowid来删除重复数据

    delete  from table1 a where rowid !=(select max(rowid) 
    from table1 b where a.name1=b.name1 )

    3、根据group by来查询重复数据

    select * from people
    where peopleId in (select peopleId from people group by peopleId having count(peopleId) > 1)

    4、删除表中多余的重复记录,重复记录是根据单个字段(Id)来判断,只留有rowid最小的记录

    delete from people 
    where Id in (select Id from people group by Id   
    having count(Id) > 1)
    and rowid not in (select min(rowid) from people group by Id having count(Id)>1)

    5、查找表中多余的重复记录(多个字段),不包含rowid最小的记录

    select * from 表 a where (a.Id,a.seq) in (select Id,seq fromgroup by Id,seq having count(*) > 1) and rowid not in (select min(rowid) fromgroup by Id,seq having count(*)>1)
    展开全文
  • 本篇文章是对Oracle删除重复数据只留一条的解决方法进行了详细的分析介绍,需要的朋友参考下
  • oracle删除id重复数据,仅保留一条

    千次阅读 2020-03-13 10:55:31
    由于id未设置主键,导致重复导入数据时,id有很多重复,想要每个id只保留一条数据。肯定不能使用max(id)或min(id)来执行了。 但是由于rowID是唯一的,所以还是很好解决。 以下提供两种办法: 1.先根据id分组排序,...
  • oracle查询重复数据删除重复记录示例分享,大家参考使用吧
  • oracle 删除重复数据方式

    千次阅读 2019-03-01 16:01:20
    Oracle 删除重复数据的几种方法 去重 第一种:distinct create table tmp_t3 as select distinct * from t3; drop table t3; alter table tmp_t2 rename to t3; -- 第二种,用rowid delete from t2 where rowid &...
  • ORACLE 删除重复数据

    千次阅读 2013-01-09 16:52:40
     (1)若想将姓名、身份证号、住址这三个字段完全相同的记录查询出来  select p1.*  from persons p1,persons p2  where p1.id  and p1.cardid = p2.cardid and p1.pname = p2.pname and p1.address = p2....
  •  Oracle数据库重复的数据一般有两种去重方法,一、完全重复数据去重;二、部分字段数据重复去重。    一、完全重复数据去重方法  对于表中完全重复数据去重,可以采用以下SQL语句。  Cod
  • oracle中如何删除重复数据,方便大家下载
  • oracle删除重复的数据,你们都用什么方法呢,我觉得很不错的去重复数据的方法,给大家分享一下
  • 内容包含四种oracle数据去重语句,拿来直接能用的,

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 96,816
精华内容 38,726
关键字:

oracle删除完全重复数据