이 글에서는 MySQL에서 중복 레코드를 조회하고 삭제하는 방법을 주로 소개하고, 참고 및 학습을 위해 공유합니다.
제목이 중복된 모든 기록 찾기:
select title,count(*) as count from user_table group by title having count>1;
SELECT * FROM t_info a WHERE ((SELECT COUNT(*) FROM t_info WHERE Title = a.Title) > 1) ORDER BY Title DESC
#🎜 🎜#1. 중복 기록 찾기
SELECT * FROM t_info a WHERE ((SELECT COUNT(*) FROM t_info WHERE Title = a.Title) > 1) ORDER BY Title DESC2. 🎜#
Select * From HZT Where ID In (Select Max(ID) From HZT Group By Title)
#🎜🎜 ## 🎜🎜#1. 모든 중복 기록을 삭제합니다(USE WITH CARE)
Delete 表 Where 重复字段 In (Select 重复字段 From 表 Group By 重复字段 Having Count(*)>1)
2. 하나를 유지하세요(대부분의 사람들에게 필요합니다^_^)# 🎜 🎜#Delete HZT Where ID Not In (Select Max(ID) From HZT Group By Title)
여기에 가장 큰 ID 기록이 보관됩니다
3. 🎜 #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 having count(*) > 1) and rowid not in (select min(rowid) from vitae group by peopleId,seq having count(*)>1)
4. 보충
에 2개 이상의 중복 레코드가 있습니다. 완전히 중복된 레코드, 즉 모든 필드가 동일합니다. 두 번째는 이름 필드와 같이 일부 키 필드가 반복되는 반면 다른 필드는 반드시 반복되지 않거나 무시될 수 있는 레코드입니다.
1. 첫 번째 유형의 중복은 해결하기가 더 쉽습니다.
select distinct * from tableName
을 사용하면 중복 레코드가 없는 결과 집합을 얻을 수 있습니다. 테이블에서 중복 레코드를 삭제해야 하는 경우(중복 레코드 1개 유지) 다음과 같이 삭제하면 됩니다.
select distinct * into #Tmp from tableName drop table tableName select * into tableName from #Tmp drop table #Tmp
이러한 중복 이유는 테이블 디자인이 좋지 않기 때문입니다. 예, 추가합니다. 고유 인덱스 열을 사용하면 문제를 해결할 수 있습니다.
2. 이러한 유형의 중복 문제는 일반적으로 중복 레코드 중 첫 번째 레코드를 유지해야 합니다. 작업 방법은 다음과 같습니다.
이름과 주소에 중복된 필드가 있다고 가정합니다. , 그리고 이를 얻기 위해 필요합니다. 두 필드의 유일한 결과 집합
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)Summary
위 내용은 이 기사의 전체 내용입니다. . 이 기사의 내용이 공부하거나 일하는 모든 사람에게 도움이 되기를 바랍니다.
추천 학습:
MySQL 튜토리얼위 내용은 MySQL에서 중복 레코드를 쿼리하고 삭제하는 완전한 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!