**SQL某一表中重復某一字段重復記錄查詢與處理


  • sql某一表中重復某一字段重復記錄查詢與處理
  •  
    • 1.查詢出重復記錄
       
       select 重復記錄字段 form  數據表 group by houseno having count(重復記錄字段)>1


      2.重復記錄只顯示一條ID值最小或最大的記錄

       select   id,* from   數據表 where houseno (select 重復記錄字段 form 數據表 group by 重復記錄

      字段 having count(重復記錄字段)>1 )


      這樣把houseno重復的的ID值全部顯示出,那么我們如何只顯示一條id最小或最大的記錄呢?

      關鍵是在上面sql的where子句中select 重復記錄字段 form 數據表 group by 重復記錄字段 having count(

      重復記錄字段)>1
      修改為
      select min(id) form 數據表 group by 重復記錄字段 having count(重復記錄字段)>1

      這樣就查詢重復記錄字段中ID最小值

      那么上面的語句就是

        select   id,* from   數據表 where houseno (select min(id) form 數據表 group by 重復記錄字段

      having count(重復記錄字段)>1 )


      3.至於對重復記錄執行delete update 就非常簡單啦

        例如只保留最小id的一條
         
         delete 數據表 where id in (select max(id ) from 數據包 group by 重復記錄字段 having count(重

      復記錄字段)>1)
       
       
       update 操作不說啦都一樣。


      4.group by  字段 having count與distinct的區別

      distct查詢顯示全部字段值都是一樣的唯一,一條記錄

       例如
      id     name   sex
      43 111 1
      44 111 1
      45 111 2
      46 222 2
      47 222 2
      48 333 1
      49 333 1

      SELECT distinct
            [name]
            ,[sex]
        FROM [database].[dbo].[a]

      要想實現上面的要去掉 sex字段 改成

      SELECT distinct
            [name]
           
        FROM [database].[dbo].[a]


      但要想取得重復ID最小值不建議用distinct。
      總結:


       對於重復記錄關鍵是查出 :采用group by 字段 having count(字段)>1 
       取得最小id的一條(很關鍵) :采用min(id)


免責聲明!

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



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