MySQL 중복 레코드가 SQL 문 및 쿼리 중복 레코드 삭제

출처: 인터넷
작성자: 사용자
키워드: 웹 프로그래밍 MySQL 자습서

방법 1
Yourtable 삭제 어디 [id] (선택 최대 ([id]) (이름 + 값)에 의해 yourtable 그룹에서에서에

방법 2
A.id=b.id b.id는 null에 테이블 왼쪽된 조인 (테이블 이름, 값으로 그룹에서에서 (ID)을 선택)에서 삭제 A b

쿼리 및 중복 레코드 삭제에 대 한 SQL 문

1, 보기 테이블에서 중복 레코드를 중복 레코드 기반 단일 필드 (Peopleid)을 판단 하
선택 * 사람들이 어디에 Peopleid (Peopleid에 의해 사람들의 그룹에서 선택 Peopleid는 수 (Peopleid) > 1)

2, 테이블에서 중복 레코드 삭제, 중복 레코드 기반 단일 필드 (Peopleid)을 판단 하 고, 최소한의 기록만 rowid를 떠나
사람들 로부터 삭제 어디에 Peopleid (Peopleid에 의해 사람들의 그룹에서 선택 Peopleid 수 (Peopleid) > 1는) 및 행 하지에 ID (사람들이 Peopleid에 의해 그룹에서 선택 분 (rowid)은 수 (Peopleid) > 1)

3. 테이블 (여러 필드)에서 중복 레코드 찾기
선택 * 이력서는 어디 (A.PEOPLEID,A.SEQ)에서 (Peopleid, PEOPLEID, 이력서 그룹화 seq 선택 SEQ는 Count (*) & G T; 1)

4, 작은 ROWID 레코드를 떠나 (여러 필드), 테이블에서 중복 레코드 삭제
이력서에서 삭제 where (A.PEOPLEID,A.SEQ)에서 (Peopleid, PEOPLEID, 이력서 그룹화 seq 선택 SEQ 수가 (*) > 1)와 rowID (선택 분 (rowid) 이력서 그룹 PEOPLEID에 의해,에서 SEQ는 Count (*) > 1)

5, (여러 필드), 테이블에서 중복 레코드를 보고 작은 ROWID 레코드를 포함 하지 않습니다.
선택 * 이력서는 어디 (A.PEOPLEID,A.SEQ)에서 (Peopleid, PEOPLEID, 이력서 그룹화 seq 선택 SEQ는 Count (*) & G T; 1)와 rowID (선택 분 (rowid) 이력서 그룹 PEOPLEID에 의해,에서 SEQ는 Count (*) > 1)

2)
예를 들어 "이름" 필드에 테이블 A, 및 "이름" 값 사이 다른 레코드를 같은 수 이며 지금 시간 테이블에서 레코드 사이의 선택 이름, count (*)에 의해 그룹에서 "이름" 값의 중복에 대 한 쿼리 Count (*) > 1 같은 성별은 또한 다음 같은 데 이름: 선택 이름, 성, 계산 (*) 이름으로 그룹에서 섹스는 count (*) > 1

3)
방법 1
@max 정수, @id 정수 선언
테이블 이름을 계산 하는 데 주요 분야 (*)에 의해 그룹에서 cur_rows 커서 선택 주요 분야, COUNT (*)에 대 한 로컬 선언 >;
오픈 Cur_rows
@id에 cur_rows를 가져오는 @max
@fetch_status @ 동안 = 0
시작
선택 @max = @max-1
SET ROWCOUNT @max
어디 메인 테이블 이름에서 삭제 필드 = @id
@id에 cur_rows를 가져오는 @max

Cur_rows를 닫습니다
SET ROWCOUNT 0

방법 2
두 중복 레코드는 "레코드 복제", 하나는 완전히 중복 레코드, 즉, 모든 필드는 중복 레코드, 두 번째는 일부 키 필드 중복 레코드, 이름 필드는 반복, 그리고 다른 분야는 반드시 반복 되지 않습니다 또는 반복 수 수 무시.

1, 첫 번째 복제를 사용 하 여 해결 하기 위해 쉽게에 대 한
고유한 선택 * tablename에서

중복 레코드 집합 결과 얻을 수 있습니다.
테이블 (1) 중복 레코드에 중복 레코드를 삭제 하는 경우 삭제할 수 있습니다 그들을 다음과 같이
고유한 선택 * #tmp tablename로
드롭 테이블 TableName
선택 * #tmp에서 TableName로
드롭 테이블 #tmp

이 복제 테이블과 저조한 설계 된 고유 인덱스 열을 추가 하 여 해결할 수 있기 때문에 발생 합니다.

2. 이러한 유형의 반복을 다음과 같이 유지 하려면 중복 레코드에서 첫 번째 레코드 필요
중복 필드의 이름, 주소는 독특한 결과 두 분야에 대 한 집합 필요로 하는 가정
Autoid, 주체성 (int, 1, 1) 선택 * TableName에서 #tmp에
이름, autoid #tmp 그룹에서에서 #tmp2로 autoid 분 (autoid) 선택
선택 * #tmp에서 어디 autoid (선택 Autoid #tmp2에서)에서
마지막 선택 이름을 주소 결과 (하나 더 autoid 필드 SELECT 절이이 열을 생략 하도록 작성할 수 있습니다) 하지만 집합을 가져옵니다.

4)
쿼리 복사
선택한 *에서 tablename 어디 (에서 ID
테이블 이름에서 ID를 선택
그룹 ID
데 수 (ID) > 1
)

동안 SQL를 학습, (인덱싱되지) 테스트를 작성 하는 테이블에서 중복 레코드를 많이 발견. 나중에, 우리 몇 가지 방법으로 중복 레코드를 삭제 하는 요약, Oracle, 독특한 ROWID 통해 중복 레코드를 삭제할 수 있습니다에 구현 하기 위해 임시 테이블을 빌드할 수도 있습니다... 이 간단 하 고 실용적인 방법 중 몇 가지를 참조, (예를 들어 테이블 직원 걸릴) 당신과 함께 공유 하 고 싶습니다.
sql > DESC 직원
이름 null?
---입력 -
emp_id 번호
Emp_name varchar2 급여 번호 (10,2)

다음 문을 통해 중복 레코드를 쿼리할 수 있습니다:
Sql > 선택 * 직원;
emp_id emp_name 급여
---

1 선샤인 10000
1 선샤인 10000
2 Semon 20000
2 Semon 20000
3 xyz 30000
2 Semon 20000
S Ql > 개별 선택 * 직원;
emp_id emp_name 급여
---
1 선샤인 10000
2 Semon 20000
3 xyz 30000
sql > 선택 * 직원 Emp_id, emp_name, 그룹에서에서 급여 수가 (*) > 1
emp_id emp_name 급여
---
1 선샤인 10000
2 Semon 20000
sql > 선택 * 직원 E1에서
어디에 rowID (Employe e 2에서 최대 (ROWID) 선택

관련 문서

연락처

이 페이지의 내용은 인터넷에서 가져온 것이므로 Alibaba Cloud의 공식 의견이 아닙니다.이 페이지에서 언급 된 제품 및 서비스는 Alibaba Cloud와는 관련이 없으므로이 페이지의 내용이 골칫거리 인 경우 저희에게 알려주십시오. 우리는 5 일 근무일 이내에 이메일을 처리 할 것입니다.

커뮤니티에서 표절 사례를 발견한 경우 info-contact@alibabacloud.com 으로 관련 증거를 첨부하여 이메일을 보내주시기 바랍니다. 당사 직원이 영업일 기준 5일 내에 연락 드리도록 하겠습니다.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.