精华内容
下载资源
问答
  • oracle去除重复字段

    2014-09-10 10:01:00
    delete from 表名 where rowid not in (select min(rowid) from 表名 group by name having count(name)>=1) 代码摘自百度。 转载于:https://www.cnblogs.com/newlooker/p/3963854.html
    delete from 表名 where rowid not in (select min(rowid) from 表名 group by name having count(name)>=1)

    代码摘自百度。

    转载于:https://www.cnblogs.com/newlooker/p/3963854.html

    展开全文
  • Oracle快速删除重复的记录发表于:2007-05-26来源:作者:点击数:标签:做项目的时候,一位同事导数据的时候,不小心把一个表中的数据全都搞重了,也就是说,这个表里所有的记录都有一条重复的。这个表的数据是千万...

    Oracle快速删除重复的记录

    发表于:2007-05-26来源:作者:点击数:

    标签:

    做项目的时候,一位同事导数据的时候,不小心把一个表中的数据全都搞重了,也就是说,这个表里所有的记录都有一条重复的。这个表的数据是千万级的,而且是生产系统。也就是说,不能把所有的记录都删除,而且必须快速的把重复记录删掉。 对此,总结了一下删除

    做项目的时候,一位同事导数据的时候,不小心把一个表中的数据全都搞重了,也就是说,这个表里所有的记录都有一条重复的。这个表的数据是千万级的,而且是生产系统。也就是说,不能把所有的记录都删除,而且必须快速的把重复记录删掉。

    对此,总结了一下删除重复记录的方法,以及每种方法的优缺点。

    为了陈诉方便,假设表名为Tbl,表中有三列col1,col2,col3,其中col1,col2是主键,并且,col1,col2上加了索引。

    1、通过创建临时表

    可以把数据先导入到一个临时表中,然后删除原表的数据,再把数据导回原表,

    creat table tbl_tmp (select distinct* from tbl);truncate table tbl;

    //清空表记录insert into tbl select * from tbl_tmp;//将临时表中的数据插回来。

    这种方法可以实现

    2、利用rowid

    delete from tbl where rowid in (select a.rowid from tbl a,

    tbl b where a.rowid>b.rowid and a.col1=b.col1 and a.col2 = b.col2)

    如果已经知道每条记录只有一条重复的,这个

    3、利用max或min函数

    这里也要使用rowid,与上面不同的是结合max或min函数来实现。SQL语句如下

    delete from tbl awhere rowid not in (select max(b.rowid)

    from tbl b where a.col1=b.col1 and a.col2 = b.col2);

    //这里max使用min也可以

    或者用下面的语句

    delete from tbl awhere rowid

    from tbl b where a.col1=b.col1 and a.col2 = b.col2);

    //这里如果把max换成min的话,前面的where子句中需要把""

    跟上面的方法思路基本是一样的,不过使用了group by,减少了显性的比较条件,提高效率。SQL语句如下:

    deletefrom tbl where rowid not in (select max(rowid)

    from tbl tgroup by t.col1, t.col2);delete from tbl where (col1, col2)

    in (select col1,col2 from tblgroup bycol1,col2havingcount(*)

    >1)and rowidnotin(selectnin(rowid)fromtblgroup bycol1,

    col2havingcount(*) >1)

    还有一种方法,对于表中有重复记录的记录比较少的,并且有索引的情况,比较适用。假定col1,col2上有索引,并且tbl表中有重复记录的记录比较少,SQL语句如下4、利用group by,提高效率

    评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)

    展开全文
  • oracle去除重复字段

    千次阅读 2017-12-22 10:51:21
    一、删除部分字段重复数据  先来谈谈如何查询重复的数据吧。  下面语句可以查询出那些数据是重复的:  select 字段1,字段2,count(*) from 表名 group by 字段1,字段2 having count(*) > 1  将上面的>...
    一、删除部分字段重复数据
    
        先来谈谈如何查询重复的数据吧。
        下面语句可以查询出那些数据是重复的:
        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)


        上面的语句非常简单,就是将查询到的数据删除掉。不过这种删除执行的效率非常低,对于大数据量来说,可能会将数据库吊死。所以我建议先将查询到的重复的数据插入到一个临时表中,然后对进行删除,这样,执行删除的时候就不用再进行一次查询了。如下:


        CREATE TABLE 临时表 AS

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


        上面这句话就是建立了临时表,并将查询到的数据插入其中。
        下面就可以进行这样的删除操作了:
        delete from 表名 a where 字段1,字段2 in (select 字段1,字段2 from 临时表);


        这种先建临时表再进行删除的操作要比直接用一条语句进行删除要高效得多。
        这个时候,大家可能会跳出来说,什么?你叫我们执行这种语句,那不是把所有重复的全都删除吗?而我们想保留重复数据中最新的一条记录啊!大家不要急,下面我就讲一下如何进行这种操作。
        在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插入临时表中,然后删除的时候在进行比较。
      create table 临时表 as
      select a.字段1,a.字段2,MAX(a.ROWID) dataid from 正式表 a GROUP BY a.字段1,a.字段2;


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


    二、完全删除重复记录
        对于表中两行记录完全一样的情况,可以用下面语句获取到去掉重复数据后的记录:
        select distinct * from 表名
        可以将查询的记录放到临时表中,然后再将原来的表记录删除,最后将临时表的数据导回原来的表中。如下:
      CREATE TABLE 临时表 AS (select distinct * from 表名);
      truncate table 正式表; --注:原先由于笔误写成了drop table 正式表;,现在已经改正过来
      insert into 正式表 (select * from 临时表);
      drop table 临时表;


        如果想删除一个表的重复数据,可以先建一个临时表,将去掉重复数据后的数据导入到临时表,然后在从临时表将数据导入正式表中,如下
      INSERT INTO t_table_bak
      select distinct * from t_table;




        三、怎样快速删除oracle数据库
        最快的方法就进入注册表 在运行……里输入regedit.
        依次展开HKEY_LOCAL_MACHINE SOFTWARE
        找到ORACLE节点。删除。
        然后删除ORACLE数据文件,安装的时候选的路径。
        最后删除oracle引导文件,在系统盘符的Program Files 里面删除oracle文件夹。








    删除重复字段项:select * from yw_ajj_7hy_all WHERE qymc in (select qymc from yw_ajj_7hy_all group by qymc having count(*)>1)
    group by qymc


    drop table qlp_1101
    create table qlp_1101 as select *, count(distinct qymc) ct from yw_qy_tj group by qymc 




    alter table qlp_1101 drop column ct
    select * from qlp_1101 limit 10
    select qymc from qlp_1101 group by qymc having count(*)>1
    drop table yw_qy_tj
    create table   yw_qy_tj  as select * from qlp_1101
    select yw_ajj_7hy_all
    展开全文
  • select a.F_AIRPROT, a.F_THREECODE, a.F_CAPACITY, a.F_AIRPORT_LEVELfrom T_AIRPORT_LEVEL awhere (a.F_AIRPROT, a.F_THREECODE/* , a.F_CAPACITY, a.F_AIRPORT_LEVEL*/) in(select L.F_AIRPROT , L.F_THREECODE/*...

    select a.F_AIRPROT, a.F_THREECODE, a.F_CAPACITY, a.F_AIRPORT_LEVEL

    from T_AIRPORT_LEVEL a

    where (a.F_AIRPROT, a.F_THREECODE/* , a.F_CAPACITY, a.F_AIRPORT_LEVEL*/) in

    (select L.F_AIRPROT , L.F_THREECODE/*, L.F_CAPACITY , L.F_AIRPORT_LEVEL*/

    from T_AIRPORT_LEVEL L

    group by L.F_AIRPROT,

    L.F_THREECODE,

    L.F_CAPACITY,

    L.F_AIRPORT_LEVEL

    having count(*) > 1)

    delete from T_AIRPORT_LEVEL a

    where (a.F_AIRPROT, a.F_THREECODE) in

    (select L.F_AIRPROT, L.F_THREECODE

    from T_AIRPORT_LEVEL L

    group by L.F_AIRPROT,

    L.F_THREECODE,

    L.F_CAPACITY,

    L.F_AIRPORT_LEVEL

    having count(*) > 1)

    and rowid not in (select min(rowid)

    from T_AIRPORT_LEVEL LL

    group by LL.F_AIRPROT,

    LL.F_THREECODE,

    LL.F_CAPACITY,

    LL.F_AIRPORT_LEVEL

    having count(*) > 1)

    展开全文
  • ORACLE删除相同字段重复数据SQL 如图,因一次工作失误导致数据重复写入四次,向同事请教了一个一次性删除整张表的重复数据的方法,在此记录分享下: 先用row_number() OVER ( PARTITION BY COL1 ORDER BY COL2) ...
  • Oracle sql 去除重复字段去除空格

    千次阅读 2016-07-21 16:32:26
    Oracle sql 去除重复字段去除空格
  • 查询重复字段: SELECT 字段,COUNT(*) FROM 表名 GROUP BY 字段 HAVING COUNT(*) >...删除重复字段: DELETE FROM 表名 WHERE rowid NOT in (SELECT MIN(ROWID) FROM 表名GROUP BY 字段); COMMIT; ...
  • 去除邮编番号,地址1,2,3相同的数据:(select t1.pstl_code, t1.addr_ln_1, t1.addr_ln_2, t1.addr_ln_3, t1.addr_ln_1_alias, t1.addr_ln_2_alias, t1.addr_ln_3_alias ...
  • 查询及删除重复记录的SQL语句 1、查找表中多余的重复记录,重复记录是根据单个字段(Id)来判断 select * from 表 where Id in (select Id from 表 group by Id having count(Id) > 1) 2、...
  • oracle 删除指定字段重复的记录

    千次阅读 2011-07-13 22:25:28
    --获取有重复记录的数据,并且其id最小的记录 --哪些字段相同,以哪些字段分组,然后获取其最小的id select min(id) id,name,score from t group by name,score having count(*) > 1; --删除那些name
  • 随着数据库容量的日益变大,表中的数据极有可能会重复出现,使我们对数据库的操作过程中带来很多的不便,那么怎么... 重复的数据可能有这样两种情况,第一种时表中只有某些字段一样,第二种是两行记录完全一样。Orac...
  • 【数据库 Oracle】--去除重复字段

    热门讨论 2015-08-31 20:21:37
    一提到去重,首先想到了distinct,但是distinct使用有很多限制,distinct这个关键字来过滤掉多余的重复记录只保留一条,但往往只用它来返回不重复记录的条数,而不是用它来返 回不重记录的所有值。其原因是distinct...
  • 查询某些字段重复记录 select a.col1,a.col2 from tablename a, (select col1,col2 from tablename group by col1,col2 having count(*)>1) b where a.col1=b.col1 and a.col2=b.col2 –保留最新的一条 ...
  • Oracle查询及删除重复记录的SQL语句 1、查找表中多余的重复记录,重复记录是根据单个字段(Id)来判断 select * from 表 where IOracle查询及删除重复记录的SQL语句1、查找表中多余的重复记录,重复记录是根据单个字段...
  • 需要去除重复字段。同时将所有字段显示出来。  SELECT * FROM (select a1,a2,a3,  Row_number() OVER (PARTITION BY a1 ORDER BY a1) rn  from a  ) where RN = 1  我是oralce新手,下面附Row_...
  • 1、查找表中多余的重复记录,重复记录是根据单个字段(Id)来判断select*from表...1)2、删除表中多余的重复记录,重复记录是根据单个字段(Id)来判断,只留有rowid最小的记录DELETEfrom表WHERE(id)IN(SELECTidF...
  • 1.Oracle删除重复记录.删除表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断,只留有rowid最小的记录.delete from peoplewhere peopleId in (select peopleId from people group by peopleId having ...
  • --删除一张表中,重复数据(几个字段一样的为重复数据记录),--例如:SELECT e.ename,e.job,COUNT(e.empno) 或者country(1)FROM emp eGROUP BY e.ename,e.job能查询重复数据和重复数目。----------------------------...
  • 也就是device_id字段不能重复,消除device_id字段重复的记录,而且device_id对应的检测信息test_result是最新的。   解决思路:用Oracle的row_number() over函数来解决该问题。 解决过程:  1.查看表...
  • ORACLE删除重复记录

    2017-12-22 18:18:25
    ORACLE删除重复记录方法
  • select a.F_AIRPROT, a.F_THREECODE, a.F_CAPACITY, a.F_AIRPORT_LEVEL  from T_AIRPORT_LEVEL a  where (a.F_AIRPROT, a.F_THREECODE/* , a.F_CAPACITY, a.F_AIRPORT_LEVEL*/) in  (select L.F_AIRPROT ...
  • oracle 删除重复数据

    2020-12-16 13:30:38
    一、对于部分字段重复数据的删除 1.查询重复的数据  select 字段1,字段2, count(*) from 表名 group by 字段1,字段2 having count(*) > 1 例:Select owner from dba_tables group by owner having count(*)>1; ...
  • Oracle查询及删除重复记录的SQL语句 1、查找表中多余的重复记录,重复记录是根据单个字段(Id)来判断 select * from 表 where IOracle查询及删除重复记录的SQL语句1、查找表中多余的重复记录,重复记录是根据单个字段...
  • Oracle删除重复数据

    2016-08-18 10:13:44
    Oracle删除重复数据 --oracle /*1.查找表中多余的重复记录,重复记录是根据单个字段(sid)来判断*/ select * from student where sid in (select sid from student group by sid having count(sid) > 1)...
  • oracle查询重复数据与删除重复记录方法 . 分类: oracle数据库2012-03-23 09:07579人阅读评论(0)收藏举报   比如现在有一人员表 (表名:peosons) 若想将姓名、身份证号、住址这三个字段完全相同的记录查询出来 ...
  • Oracle 删除重复记录

    2021-07-15 23:22:51
    字段A,B,C三个字段相同则认为是相同记录,删除重复记录只保留一条有效记录,可执行以下脚本 delete from TABLE_A t2 where not exists (select 1 from (select min(rowid) rid from TABLE_A group by A,B,C) t1 ...
  • Oracle根据字段去除表中重复数据

    万次阅读 2019-05-28 14:07:31
    根据MOBILE查询SY_WXUSER表中的重复数据: select * from SY_WXUSER where MOBILE in (select MOBILE from SY_WXUSER group by MOBILE having ...根据MOBILE删除SY_WXUSER表中的重复数据: delete from SY_WXUSER...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 64,951
精华内容 25,980
关键字:

oracle删除重复字段