Oracle數據庫查詢和取出表中重復記錄


      要想處理Oracle數據庫查詢和取出表中重復記錄,需要先了解ROWID---偽列。

      ROWID 是一種數據類型,他是用基於64位編碼的18個字符來唯一標識一條記錄的物理位置的一個ID,類似於表的主鍵,ROWID一般情況是按照遞增的順序排序的,默認情況下

索引也是按照ROWID的順序來顯示的,所以對於完全相同的兩條記錄,結果會按照ROWID的順序來進行排序。

     ROWID可以被查詢,例如:select rowid,a.* from emp a.

     這次主要是利用ROWID來進行重復數據的處理,所以ROWID不做過於詳細的介紹,下面說下利用ROWID處理重復數據。

     假設emp表存儲如下:

     IDNO   NAME   SEX  AGE

     1101    Sherry      1        25

     1102    Nancy      1        26

     1101    Sherry      1        25

查詢重復記錄SQL如下:

   select  *
   from     emp a
   where (rowid,a.IDNO) not in (select max(rowid),a.IDNO
                                                 from emp a
                                                 group by a.IDNO)

sql解讀:紅色字體會查詢出來不重復的記錄,那么關聯外面的,rowid不在后面結果集的,即重復記錄。

     可以自己擴展,比如我要去除重復記錄ROWID最大或者最小的值等等,了解遠原理之后,變形SQL即可。

     另外可以看下下面的SQL

      select gv.idno, gv.name
      from dept fg,
                         (select g.idno, g.name
                          from emp g
                         where (rowid, g.idno) in
                                                                (select max(rowid), t.idno
                                                                 from emp t    
                                                                 group by t.policy_code)

                         ) gv
      where fg.idno=gv.idno
      and fg.deptno='001'


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM