>데이터 베이스 >MySQL 튜토리얼 >MySQL - 중복 레코드 조회/삭제 방법에 대한 자세한 설명

MySQL - 중복 레코드 조회/삭제 방법에 대한 자세한 설명

黄舟
黄舟원래의
2017-03-13 13:34:161622검색

중복 제목이 있는 레코드 모두 찾기:

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. table

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개 이상 있는데, 하나는 완전히 중복된 레코드, 즉 레코드이다. 모든 필드가 반복되고 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.