>  기사  >  데이터 베이스  >  MySQL에서 중복 레코드를 쿼리하고 삭제하는 완전한 방법

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

青灯夜游
青灯夜游앞으로
2019-11-25 18:37:302478검색

이 글에서는 MySQL에서 중복 레코드를 조회하고 삭제하는 방법을 주로 소개하고, 참고 및 학습을 위해 공유합니다.

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. 중복 기록 찾기

1. 중복 기록 모두 찾기

SELECT * FROM t_info a WHERE ((SELECT COUNT(*) FROM t_info WHERE Title = a.Title) > 1) ORDER BY Title DESC

2. 🎜#

Select * From HZT Where ID In (Select Max(ID) From HZT Group By Title)

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


2. 중복 레코드 삭제

#🎜🎜 ## 🎜🎜#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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 cnblogs.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제