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

  • 相关阅读:
    如果你正在找工作,也许这七个方法会帮到你
    WebSocket 浅析
    关系数据库涉及中的范式与反范式
    MySQL字段类型与合理的选择字段类型
    ER图,数据建模与数据字典
    详解慢查询
    MySQL的最佳索引攻略
    后端技术演进
    MySQL主从复制(BinaryLog)
    MySQL读写分离
  • 原文地址:https://www.cnblogs.com/chengfan2008/p/2164639.html
Copyright © 2011-2022 走看看