MySQL - 중복 레코드를 쿼리하고 중복 레코드를 삭제하는 완전한 방법

黄舟
풀어 주다: 2017-01-21 13:21:17
원래의
971명이 탐색했습니다.

제목이 중복된 모든 기록 찾기:

SELECT * FROM t_info a WHERE ((SELECT COUNT(*) FROM t_info WHERE Title = a.Title) > 1) ORDER BY Title DESC
로그인 후 복사

1. 중복 기록 찾기

1. 중복 기록 모두 찾기

Select * From 表 Where 重复字段 In (Select 重复字段 From 表 Group By 重复字段 Having Count(*)>1)
로그인 후 복사

2. 표시됨) )

Select * From HZT Where ID In (Select Max(ID) From HZT Group By Title)
로그인 후 복사

참고: ID가 가장 큰 레코드가 여기에 표시됩니다


2. 중복 레코드 삭제

1. 모든 중복 기록을 삭제하세요(주의해서 사용하세요)

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)
로그인 후 복사

위는 중복 레코드를 쿼리하고 중복 레코드를 삭제하는 완전한 방법인 MySQL의 내용입니다. 더 많은 관련 내용을 보려면 PHP 중국어 웹사이트(www.php.cn)를 참고하세요. )!


원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿