SELECT*
FROMt_infoa
WHERE((SELECTCOUNT(*)
FROMt_info
WHERETitle=a.Title)>1)
ORDERBYTitleDESC
一。查詢重複記錄
1。查詢全部重複記錄
Select*From表Where重複欄位In(Select重複欄位From表GroupBy重複欄位HavingCount(*)>1)
2。過濾重複記錄(只顯示一條)
Select*FromHZTWhereIDIn(SelectMax(ID)FromHZTGroupByTitle)
注:此處顯示ID最大一條記錄
Delete表Where重複欄位In(Select重複欄位From表GroupBy重複欄位HavingCount(*)>1)
2。保留一條(這個應該是大多數人所需要的^_^)
DeleteHZTWhereIDNotIn(SelectMax(ID)FromHZTGroupByTitle)
注:此處保留ID最大一條記錄
1、查詢表中多餘的重複記錄,重複記錄是根據單個欄位(peopleId)來判斷
select*frompeople
wherepeopleIdin(selectpeopleIdfrompeoplegroupbypeopleIdhavingcount(peopleId)>1)
deletefrompeople
androwidnotin(selectmin(rowid)frompeoplegroupbypeopleIdhavingcount(peopleId)>1)
3、查詢表中多餘的重複記錄(多個欄位)
select*fromvitaea
where(a.peopleId,a.seq)in(selectpeopleId,seqfromvitaegroupbypeopleId,seqhavingcount(*)>1)
deletefromvitaea
androwidnotin(selectmin(rowid)fromvitaegroupbypeopleId,seqhavingcount(*)>1)
5、查詢表中多餘的重複記錄(多個欄位),不包含rowid最小的記錄
補充:
有兩個以上的重複記錄,一是完全重複的記錄,也即所有欄位均重複的記錄,二是部分關鍵欄位重複的記錄,比如Name欄位重複,而其他欄位不一定重複或都重複可以忽略。
1、對於第一種重複,比較容易解決,使用
selectdistinct*fromtableName
就可以得到無重複記錄的結果集。
selectdistinct*into#TmpfromtableName
droptabletableName
select*intotableNamefrom#Tmp
droptable#Tmp
發生這種重複的原因是表設計不周產生的,增加唯一索引列即可解決。
2、這類重複問題通常要求保留重複記錄中的第一條記錄,操作方法如下
假設有重複的欄位為Name,Address,要求得到這兩個欄位唯一的結果集
selectidentity(int,1,1)asautoID,*into#TmpfromtableName
selectmin(autoID)asautoIDinto#Tmp2from#TmpgroupbyName,autoID
select*from#TmpwhereautoIDin(selectautoIDfrom#tmp2)
SELECT*
FROMt_infoa
WHERE((SELECTCOUNT(*)
FROMt_info
WHERETitle=a.Title)>1)
ORDERBYTitleDESC
一。查詢重複記錄
1。查詢全部重複記錄
Select*From表Where重複欄位In(Select重複欄位From表GroupBy重複欄位HavingCount(*)>1)
2。過濾重複記錄(只顯示一條)
Select*FromHZTWhereIDIn(SelectMax(ID)FromHZTGroupByTitle)
注:此處顯示ID最大一條記錄
Delete表Where重複欄位In(Select重複欄位From表GroupBy重複欄位HavingCount(*)>1)
2。保留一條(這個應該是大多數人所需要的^_^)
DeleteHZTWhereIDNotIn(SelectMax(ID)FromHZTGroupByTitle)
注:此處保留ID最大一條記錄
1、查詢表中多餘的重複記錄,重複記錄是根據單個欄位(peopleId)來判斷
select*frompeople
wherepeopleIdin(selectpeopleIdfrompeoplegroupbypeopleIdhavingcount(peopleId)>1)
deletefrompeople
wherepeopleIdin(selectpeopleIdfrompeoplegroupbypeopleIdhavingcount(peopleId)>1)
androwidnotin(selectmin(rowid)frompeoplegroupbypeopleIdhavingcount(peopleId)>1)
3、查詢表中多餘的重複記錄(多個欄位)
select*fromvitaea
where(a.peopleId,a.seq)in(selectpeopleId,seqfromvitaegroupbypeopleId,seqhavingcount(*)>1)
deletefromvitaea
where(a.peopleId,a.seq)in(selectpeopleId,seqfromvitaegroupbypeopleId,seqhavingcount(*)>1)
androwidnotin(selectmin(rowid)fromvitaegroupbypeopleId,seqhavingcount(*)>1)
5、查詢表中多餘的重複記錄(多個欄位),不包含rowid最小的記錄
select*fromvitaea
where(a.peopleId,a.seq)in(selectpeopleId,seqfromvitaegroupbypeopleId,seqhavingcount(*)>1)
androwidnotin(selectmin(rowid)fromvitaegroupbypeopleId,seqhavingcount(*)>1)
補充:
有兩個以上的重複記錄,一是完全重複的記錄,也即所有欄位均重複的記錄,二是部分關鍵欄位重複的記錄,比如Name欄位重複,而其他欄位不一定重複或都重複可以忽略。
1、對於第一種重複,比較容易解決,使用
selectdistinct*fromtableName
就可以得到無重複記錄的結果集。
selectdistinct*into#TmpfromtableName
droptabletableName
select*intotableNamefrom#Tmp
droptable#Tmp
發生這種重複的原因是表設計不周產生的,增加唯一索引列即可解決。
2、這類重複問題通常要求保留重複記錄中的第一條記錄,操作方法如下
假設有重複的欄位為Name,Address,要求得到這兩個欄位唯一的結果集
selectidentity(int,1,1)asautoID,*into#TmpfromtableName
selectmin(autoID)asautoIDinto#Tmp2from#TmpgroupbyName,autoID
select*from#TmpwhereautoIDin(selectautoIDfrom#tmp2)