SQL 查詢重覆數據

来源:http://www.cnblogs.com/sensenwang/archive/2017/09/13/7513731.html
-Advertisement-
Play Games

1、查找表中多餘的重覆記錄,重覆記錄是根據單個欄位(peopleId)來判斷 select * from peoplewhere peopleId in (select peopleId from people group by peopleId having count (peopleId) > ...


1、查找表中多餘的重覆記錄,重覆記錄是根據單個欄位(peopleId)來判斷

select * from people
where peopleId in (select peopleId from people group by peopleId having count (peopleId) > 1)


2、刪除表中多餘的重覆記錄,重覆記錄是根據單個欄位(peopleId)來判斷,只留有rowid最小的記錄

delete from people
where peopleId in (select peopleId from people group by peopleId having count (peopleId) > 1)

and rowid not in (select min(rowid) from people group by peopleId having count (peopleId)>1)


3、查找表中多餘的重覆記錄(多個欄位) 

select * from vitae a
where (a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq having count(*) > 1)


4、刪除表中多餘的重覆記錄(多個欄位),只留有rowid最小的記錄

delete from vitae a
where (a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq having count(*) > 1)

and rowid not in (select min(rowid) from vitae group by peopleId,seq having count(*)>1)


5、查找表中多餘的重覆記錄(多個欄位),不包含rowid最小的記錄

select * from vitae a
where (a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq havingcount(*) > 1)

and rowid not in (select min(rowid) from vitae group by peopleId,seq having count(*)>1)


(二)
比方說 在A表中存在一個欄位“name”,而且不同記錄之間的“name”值有可能會相同,現在就是需要查詢出在該表中的各記錄之間,“name”值存在重覆的項;

Select Name,Count(*) From A Group By Name Having Count(*) > 1


如果還查性別也相同大則如下:

Select Name,sex,Count(*) From A Group By Name,sex Having Count(*) > 1


(三)
方法一

  declare @max integer,@id integer
declare cur_rows cursor local for select 主欄位,count(*) from 表名 group by 主欄位 having

count(*) >; 1
open cur_rows
fetch cur_rows into @id,@max
while @@fetch_status=0
begin
select @max = @max -1
set rowcount @max
delete from 表名 where 主欄位 = @id
fetch cur_rows into @id,@max
end
close cur_rows
set rowcount 0


方法二

有兩個意義上的重覆記錄,一是完全重覆的記錄,也即所有欄位均重覆的記錄,二是部分關鍵欄位重

復的記錄,比如Name欄位重覆,而其他欄位不一定重覆或都重覆可以忽略。

  1、對於第一種重覆,比較容易解決,使用   select distinct * from tableName  就可以得到無重覆記錄的結果集。

 如果該表需要刪除重覆的記錄(重覆記錄保留1條),可以按以下方法刪除

select distinct * into #Tmp from tableName drop table tableName
select * into tableName from #Tmp
drop table #Tmp

發生這種重覆的原因是表設計不周產生的,增加唯一索引列即可解決。

 

 2、這類重覆問題通常要求保留重覆記錄中的第一條記錄,操作方法如下

  假設有重覆的欄位為Name,Address,要求得到這兩個欄位唯一的結果集

select identity(int,1,1) as autoID, * into #Tmp from tableName
select min(autoID) as autoID into #Tmp2 from #Tmp group by Name,autoID
select * from #Tmp where autoID in(select autoID from #tmp2)


最後一個select即得到了Name,Address不重覆的結果集(但多了一個autoID欄位,實際寫時可以寫在select子句中省去此列)

(四)查詢重覆

select * from tablename where id in (
select id from tablename
group by id
having count(id) > 1
)  
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • iOS精選源碼 iOS優質博客 首先你要花點時間針對objective-c語言的學習;畢竟這個是iOS開發的基礎(你也可以嘗試用Swift,但此項目只是針對OC),編程套路其實都是差不多,多寫多想多實踐;關於環境的搭建就不在本文進行介紹,這部分內容可以自行百度或谷歌,都有相應的說明;對於一個剛入門總 ...
  • 一、編譯生成FFmpeg的頭文件和so庫 如果不知道怎麼做可以看這裡:http://blog.csdn.net/qsw15923/article/details/77943515 二、新建項目 在新建時勾選下方的include C++support,然後一路下一步即可 創建完項目後如果之前沒有配置N ...
  • 【新版】Android技術博客精華彙總(原文鏈接內持續更新) http://www.apkbus.com/thread-313856-1-1.html Kotlin Kotlin學習資料彙總 http://www.apkbus.com/blog-261991-68033.html 使用Kotlin來 ...
  • Android精選源碼 Android優質博客 從零開始搭建一個項目(rxJava+Retrofit+Dagger2) 下http://www.apkbus.com/blog-873057-72599.htmltip:本文所使用到的技術有 RxJava,Retrofit,Glide,Dagger2, ...
  • FFmpeg是很好用的一個音視頻庫,功能強大,但是用起來並不是很方便。之前一直不想用FFmpeg,因為感覺編譯太麻煩,但是到了不得不用的時候了,沒辦法,參考了網上大神的方法,在這裡自己也記錄一下方便以後再次查看。 一、環境 Ubuntu14.04 二、NDK環境配置 NDK下載鏈接:https:// ...
  • 當我們使用Xcode進行開發的時候,並不是所有的時候都需要將代碼運行在iPhone,有時候模擬器就可以解決這些問題, 但是當你使用模擬器的時候會發現,在TextFiled中輸入信息時,如果你是用模擬器上的鍵盤進行操作,OK沒問題, 但是當你是用鍵盤輸入信息的話,那麼你會發現模擬器上的鍵盤就不會再顯示 ...
  • 那麼 Appium 到底是怎麼工作的呢? Appium 官方教程好難啊, 我自己總結了一份超簡單 Appium 教程。 ...
  • TTS語音合成方案分為離線合成方案和線上合成方案,離線合成方案省去網路請求,合成速度更快,節省網路流量,但是合成音的聽起來比較機械,語速和停頓的處理較差一些。如果對合成音的效果要求不是特別高,可以考慮採用iOS自帶的AVSpeechSynthesis框架,免去語音庫的合入,減少安裝包大小。 ...
一周排行
    -Advertisement-
    Play Games
  • 前言 本文介紹一款使用 C# 與 WPF 開發的音頻播放器,其界面簡潔大方,操作體驗流暢。該播放器支持多種音頻格式(如 MP4、WMA、OGG、FLAC 等),並具備標記、實時歌詞顯示等功能。 另外,還支持換膚及多語言(中英文)切換。核心音頻處理採用 FFmpeg 組件,獲得了廣泛認可,目前 Git ...
  • OAuth2.0授權驗證-gitee授權碼模式 本文主要介紹如何筆者自己是如何使用gitee提供的OAuth2.0協議完成授權驗證並登錄到自己的系統,完整模式如圖 1、創建應用 打開gitee個人中心->第三方應用->創建應用 創建應用後在我的應用界面,查看已創建應用的Client ID和Clien ...
  • 解決了這個問題:《winForm下,fastReport.net 從.net framework 升級到.net5遇到的錯誤“Operation is not supported on this platform.”》 本文內容轉載自:https://www.fcnsoft.com/Home/Sho ...
  • 國內文章 WPF 從裸 Win 32 的 WM_Pointer 消息獲取觸摸點繪製筆跡 https://www.cnblogs.com/lindexi/p/18390983 本文將告訴大家如何在 WPF 裡面,接收裸 Win 32 的 WM_Pointer 消息,從消息裡面獲取觸摸點信息,使用觸摸點 ...
  • 前言 給大家推薦一個專為新零售快消行業打造了一套高效的進銷存管理系統。 系統不僅具備強大的庫存管理功能,還集成了高性能的輕量級 POS 解決方案,確保頁面載入速度極快,提供良好的用戶體驗。 項目介紹 Dorisoy.POS 是一款基於 .NET 7 和 Angular 4 開發的新零售快消進銷存管理 ...
  • ABP CLI常用的代碼分享 一、確保環境配置正確 安裝.NET CLI: ABP CLI是基於.NET Core或.NET 5/6/7等更高版本構建的,因此首先需要在你的開發環境中安裝.NET CLI。這可以通過訪問Microsoft官網下載並安裝相應版本的.NET SDK來實現。 安裝ABP ...
  • 問題 問題是這樣的:第三方的webapi,需要先調用登陸介面獲取Cookie,訪問其它介面時攜帶Cookie信息。 但使用HttpClient類調用登陸介面,返回的Headers中沒有找到Cookie信息。 分析 首先,使用Postman測試該登陸介面,正常返回Cookie信息,說明是HttpCli ...
  • 國內文章 關於.NET在中國為什麼工資低的分析 https://www.cnblogs.com/thinkingmore/p/18406244 .NET在中國開發者的薪資偏低,主要因市場需求、技術棧選擇和企業文化等因素所致。歷史上,.NET曾因微軟的閉源策略發展受限,儘管後來推出了跨平臺的.NET ...
  • 在WPF開發應用中,動畫不僅可以引起用戶的註意與興趣,而且還使軟體更加便於使用。前面幾篇文章講解了畫筆(Brush),形狀(Shape),幾何圖形(Geometry),變換(Transform)等相關內容,今天繼續講解動畫相關內容和知識點,僅供學習分享使用,如有不足之處,還請指正。 ...
  • 什麼是委托? 委托可以說是把一個方法代入另一個方法執行,相當於指向函數的指針;事件就相當於保存委托的數組; 1.實例化委托的方式: 方式1:通過new創建實例: public delegate void ShowDelegate(); 或者 public delegate string ShowDe ...