zoukankan      html  css  js  c++  java
  • 刪除重複資料

     最近,在查詢資料庫中數據時,發現因為之前在table中未設置唯一鍵,使得有很多資料重復,現需刪除重復的資料,可又需要將其中的一筆保留,先思索了一翻,自已也嘗試著去寫這樣的語句,可寫時還是有些問題,上網查詢了一些資料,發現如下的sql用起來真的很不錯。

      1.針對於相應欄位先查詢有重復的欄位資料

       select  c1,c2,c3 from tabaname group by c1,c2,c3 having(count(*)>1);

         2.查詢重復的資料對應的rowid但卻排除最上面的一筆

       select rowid from tablename where (c1,c2,c3) in (select  c1,c2,c3 from tabaname group by c1,c2,c3 having(count(*)>1))

       3.創建一個Table用來記錄rowid(感覺用來創建一個table用來記錄時刪除更有效率)

       create table recordrowid as ( select rowid from tablename where (c1,c2,c3) in (select  c1,c2,c3 from tabaname group by c1,c2,c3 having(*)>1 and rowid not in(select min(rowid) from tablename group by c1,c2,c3 having count(*)>1)));

       4.刪除重復應記錄檔

      delete tablename where rowid in(select * from recordrowid );

       總結:

      1.在開始建立Table時一定要考慮到唯一鍵,以免後繼有不必要的麻煩

          2.在Oracle資料庫中每一筆資料它有自己的rowid,通過它來查找資料也不失為一種好的方式.

          3.用會用having條件語句,它與Where語句類似,其最大的區別在於where是在加完條件之後進行排列,而having是在排列之後再加上條件.

  • 相关阅读:
    debian7.2+nginx+mysql
    VirtualBox为虚拟OS硬盘扩容
    VirtualBox-Debian7.2-share
    linux 标准化
    linux user date
    Array方法总结
    GET和POST区别 / doGet()和doPost()的区别
    servlet错误:HTTP Status 405
    python类型转换、数值操作
    Architecture:话说科学家/工程师/设计师/商人
  • 原文地址:https://www.cnblogs.com/chengfan2008/p/2164639.html
Copyright © 2011-2022 走看看