萬盛學電腦網

 萬盛學電腦網 >> 數據庫 >> mysql教程 >> sql過濾重復數據幾種方法

sql過濾重復數據幾種方法

在開發中經常會碰到關於有重復記錄的數據,我們重想辦法來過濾一些重復的記錄,下面我總結了幾種方法,希望對大家有用。

方法一,

 

select identity(int,1,1) as id,* into #temp from tabel
select * from #temp where id in (
select max(id) from #emp where having count(*)>1 group by col1,col2,col3...)


實例

有一個表的結構是這樣的

          id                 bookname                             cbs                             zz    
          001               asp教程大全                       清華大學出版社           田正平
          002               數據庫教程系統教程         高等教育出版社         周奧英
          003               asp大全                       清華大學出版社           田正平
         
現在我想做一個查詢,要查找出的字段如下

            bookname,   cbs,   zz  

按bookname字段過濾記錄,但要顯示多個字段

查詢的結果應為

      bookname                 cbs                                 zz    
      asp大全                   清華大學出版社           田正平
      數據庫系統教程     高等教育出版社           周奧英
       
    但是我不知道SQL語句該怎麼寫法,請大家指導

 


nononono(null,null):的方法可以解決完全重復的問題,如果有若干字段不重復
但還要顯示怎麼辦?
例如上個例子中如果要顯示
          id                 bookname                             cbs                             zz       new_id
(重復的記錄時new_id是重復的,但其他的與其他的New_id記錄不重復)
並且ID顯示最大的值。應該怎樣解決。
一般使用

Select   Max(id)   id   ,max(bookname)  
bookname,max(cbs)   cbs   ,max(zz)   zz   ,new_id     from   table     group   by   new_id


group by 子句後跟的字段就是你用來判斷重復的條件,如只有col1,那麼只要col1字段內容相同即表示記錄相同。


col1+','+col2+','...col5 聯合主鍵

 

select * from table where col1+','+col2+','...col5 in (
select max(col1+','+col2+','...col5) from table
where having count(*)>1
group by col1,col2,col3,col4
)


/////////

select   t1.bookname,t1.zz,t1.cbs   from   table   t1
join   (   select   min(id)   as   id,bookname   from   table
              group   by   bookname   )   as   t2
on   t1.bookname   =   t2.bookname   and   t1.id   =   t2.id

copyright © 萬盛學電腦網 all rights reserved