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是在排列之後再加上條件.

  • 相关阅读:
    Beta 第七天
    Beta 第六天
    Beta 第五天
    Beta 第四天
    Beta 第三天
    Beta 第二天
    Beta 凡事预则立
    Beta 第一天
    Beta 集合
    打造专属测试平台5-使用Docker部署MySQL数据库
  • 原文地址:https://www.cnblogs.com/chengfan2008/p/2164639.html
Copyright © 2011-2022 走看看