`

oracle查询重复记录

阅读更多

1.操作单个字段:

    a.查询出表中单个字段的重复记录.

SELECT * FROM aj_xyrxx t1 WHERE t1.ajbh IN 
    (SELECT t2.ajbh FROM aj_xyrxx t2 
         GROUP BY t2.ajbh HAVING COUNT(t2.ajbh) > 1) ;


    b.删除单个字段重复的记录,只保留一个(此处可以使用oracle自带的伪列rowid或rownum).

DELETE FROM aj_xyrxx t1 WHERE t1.ajbh IN 
    (SELECT t2.ajbh FROM aj_xyrxx t2 
         GROUP BY t2.ajbh HAVING COUNT(t2.ajbh) > 1) AND 
         ROWID NOT IN (SELECT MIN(ROWID) FROM aj_xyrxx t3 
                          GROUP BY t3.ajbh  HAVING COUNT(t3.ajbh) > 1) ;


2.操作多个字段
   a.查询

SELECT * FROM aj_xyrxx t1 WHERE (t1.ajbh,t1.rybh) IN 
    (SELECT t2.ajbh,t2.rybh FROM aj_xyrxx t2 
         GROUP BY t2.ajbh,t2.rybh HAVING COUNT(*) > 1) ;

   b.删除

 

DELETE FROM aj_xyrxx t1 WHERE (t1.ajbh,t1.rybh) IN 
    (SELECT t2.ajbh,t2.rybh FROM aj_xyrxx t2 
         GROUP BY t2.ajbh,t2.rybh HAVING COUNT(*) > 1) AND 
         ROWID NOT IN (SELECT MIN(ROWID) FROM aj_xyrxx t3 
                          GROUP BY t3.ajbh,t3.rybh  HAVING COUNT(*) > 1) ;
 

 

 

 

分享到:
评论
4 楼 ysj5125094 2011-07-13  
bing_zz 写道
b.删除单个字段重复的记录,只保留一个(此处可以使用oracle自带的伪列rowid或rownum).

这句话有点迷惑人,按博客的写法,把rowid换成rownum是把所有的重复列都删除的,楼主应该把使用rownum的方法也写出来,或者提个醒。


哦,这个地方我要解释一下了,如果只想用SQL语句删除重复记录的话只能用rowid伪列.如果想用rownum删的话,那么就必须得使用oracle的存储过程了.
例如(程序块):
DECLARE
    CURSOR wfxyr_cursor IS SELECT t.ajbh,t.rybh FROM aj_xyrxx t WHERE t.rybh IS NOT NULL ;
BEGIN
    FOR wfxyr_record IN wfxyr_cursor LOOP 
        BEGIN
            --注意rkbm必须存在.
            SELECT wfxyrxh INTO v_wfxyrxh FROM za_zfba_jcxx_rk_saxyrxx WHERE rkbm = v_rybh ;
            --继续其他业务处理...
        EXCEPTION
            When dup_val_on_index THEN
                dbms_output.put_line('主键重复');
                ROLLBACK ;
            WHEN OTHERS THEN
                --如果在上面的查询中出现异常,说明查询出多条重复记录,可以在此处把重复记录给删除掉只保留第一条.
                DELETE FROM za_zfba_jcxx_rk_saxyrxx WHERE rkbm = v_rybh AND rownum <> 1 ;
                COMMIT ;
        END ;
    END LOOP ;
END ;

上面程序片段是我刚写的,没有经过测试,但是大概是那么个意思,看看我说的你能理解不.
3 楼 bing_zz 2011-07-12  
b.删除单个字段重复的记录,只保留一个(此处可以使用oracle自带的伪列rowid或rownum).

这句话有点迷惑人,按博客的写法,把rowid换成rownum是把所有的重复列都删除的,楼主应该把使用rownum的方法也写出来,或者提个醒。
2 楼 ysj5125094 2011-07-07  
yulongxiang 写道
可以同时操纵多个字段,我还试过呢,学习了。

呵呵,我也是今天用到,所以才学习到这儿,做个笔记下来,方便以后查阅.
1 楼 yulongxiang 2011-07-07  
可以同时操纵多个字段,我还试过呢,学习了。

相关推荐

    Oracle查询重复数据与删除重复记录方法(txt)

    Oracle查询重复数据与删除重复记录方法,Oracle查询重复数据与删除重复记录方法

    oracle 查询出每组中最大的三个记录和查询重复记录

    在Oracle数据库中,查询数据是日常操作的一部分,而...总之,Oracle数据库提供了丰富的功能来处理复杂的数据查询,包括找出每组的最大记录和重复记录。理解并熟练运用这些技术,对于进行高效的数据分析和管理至关重要。

    oracle查询重复数据方法

    例如,下面的语句可以查询出表中多余的重复记录,并删除重复记录中除了 rowid 最小的记录以外的所有记录: ```sql declare @max integer, @id integer declare cur_rows cursor local for select 主字段, count(*) ...

    使用Oracle查询并删除重复记录的SQL语句

    使用Oracle查询并删除重复记录的SQL语句 在实际应用中,删除重复记录是非常常见的操作,特别是在数据导入、数据整合和数据清洁等场景中。Oracle数据库提供了多种方式来查询和删除重复记录,本文将详细介绍这些方法...

    Oracle查询重复数据并删除,只保留一条记录.docx

    在 Oracle 中,我们可以使用 GROUP BY 语句来查找重复记录。假设我们要根据 FIELD_CODE 字段来判断重复记录,可以使用以下语句: ```sql select * from R_RESOURCE_DETAILS where FIELD_CODE in(select FIELD_CODE ...

    oracle删除重复记录性能分析

    oracle删除重复记录性能分析平时收集,希望能给需要帮助的人提供便利

    ORACLE重复记录查询.docxORACLE

    1、查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断 select * from people where peopleId in (select peopleId from people group by peopleId having count (peopleId) &gt; 1) 2、删除表中多余...

    oracle中如何删除重复的记录

    oracle中 ,如何删除重复的记录信息

    oracle删除重复记录

    在Oracle数据库中,处理重复记录是一个常见的需求,尤其是在数据清理和数据整合的过程中。以下是一些删除重复记录的方法: 1. **RowID方法**: 这种方法基于Oracle特有的ROWID字段,它是每行记录的唯一物理地址。...

    解决Oracle删除重复数据只留一条的方法详解

    查询及删除重复记录的SQL语句1、查找表中多余的重复记录,重复记录是根据单个字段(Id)来判断select * from 表 where Id in (select Id from 表 group by Id having count(Id) &gt; 1)2、删除表中多余的重复记录,...

    Oracle查询重复数据与删除重复记录方法

    几个删除重复记录的SQL语句  1.用rowid方法  2.用group by方法  3.用distinct方法  1。用rowid方法

    查询及删除重复记录的SQL语句.

    查询及删除oracle重复记录的SQL语句

    wxh Oracle数据库删除重复记录的方法

    Oracle数据库删除重复记录的方法

    Oracle中查找和删除重复记录方法

    删除重复记录的方法原理:在Oracle中,每一条记录都有一个rowid,rowid在整个数据库中是唯一的,rowid确定了每条记录是在Oracle中的哪一个数据文件、块、行上。在重复的记录中,可能所有列的内容都相同,但rowid不会...

    Oracle查询表里的重复数据方法

     一张person表,有id和name的两个字段,id是唯一的不允许重复,id相同则认为是重复的记录。 二、解决  select id from group by id having count(*) &gt; 1  按照id分组并计数,某个id号那一组的数量超过1条则认为...

    Oracle数据库删除表中重复记录的方法三则.txt

    Oracle数据库删除表中重复记录的方法三则.txt

    oracle中如何删除重复数据

    以下将详细解释如何在Oracle中处理这两种类型的重复数据问题:部分字段重复和完全重复记录。 一、部分字段重复数据的删除 1. 查询重复数据: 使用`GROUP BY`和`HAVING`子句可以找出具有相同值的字段组合。例如,...

    oracle 查询列值相同其他信息的信息

    本主题将深入探讨如何在Oracle中查询列值相同但其他信息不同的记录,这对于数据分析师和数据库管理员来说是一项基本技能。 首先,我们要理解SQL(结构化查询语言)是与数据库进行交互的语言,而Oracle SQL是其特定...

Global site tag (gtag.js) - Google Analytics