중복 제거 SQL 단일 테이블 / 멀티 테이블 쿼리

중복 제거 SQL 단일 테이블 / 멀티 테이블 쿼리

단일 테이블 별개에게

멀티 테이블 그룹 별

및 제한에 의해 순서에 따라 그룹 앞에 위치해야하며, 오류가있을 것입니다

************************************************** **********************************

1 중복 룩업 테이블 중복 레코드 중복 기록은 하나의 필드 (peopleid) 결정에 기초

사람들 * 선택
에 peopleId (는 카운트를 갖는 peopleId 의해 사람들 그룹으로부터 peopleId을 선택 (peopleId)> 1) 여기서,

2, 테이블이 삭제됩니다 중복 중복 기록, 중복 레코드는 ROWID 단지 작은 녹화를 떠나, (peopleid가)에 따라 결정되는 하나의 필드
명에서 삭제
에 peopleid이 (COUNT (peopleid)>를 갖는 peopleid 사람들에 의해 그룹 peopleid를 선택합니다. (1) )
및하지 ROWID (SELECT 분 (ROWID) 그룹에서 COUNT (peopleid)>를 갖는 peopleid에서 사람들이. 1)

3 추가 검색 테이블이 반복적으로 기록된다 (하나 개 이상의 필드)
SELECT * 이력서 (A)로부터
(a.peopleId, a.seq)에서 (*)> (이력서, SEQ에서 peopleid 의해 HAVING COUNT를 SEQ 그룹 peopleid를 선택한다. 1)

도 4는, 테이블 ROWID 만 최소 기록을 남겨 중복 중복 (다중 필드), 삭제
이력서 A로부터 삭제
(HAVING 이력서, SEQ에서 peopleid 의해 SEQ 그룹을 선택 peopleid에 (a.peopleId, a.seq)를 COUNT (*)>. 1)
peopleid 기, SEQ HAVING COUNT (*)>에 의해 이력서에서 ROWID 없음 (SELECT 분 (ROWID)한다. 1)


도 5는, 반복적으로 추가 (다중 필드)에 기록 된 룩업 테이블은, ROWID 최소 기록을 포함하지 않는
이력서 A로부터 선택 *
(HAVING 이력서, SEQ에서 peopleid 의해 SEQ 그룹 peopleid를 선택으로 (a.peopleId, a.seq) COUNT (*)>. 1)
peopleid 기, SEQ HAVING COUNT (*)>에 의해 이력서에서 ROWID 없음 (SELECT 분 (ROWID)한다. 1)

(B)
예를
표 A에서 필드 "이름"가,
다른 레코드 사이의 "이름"의 값은 동일 할 수있다
지금 테이블의 레코드 중에서 필요가있다 "이름"값 중복 항목을,
선택 이름, 백작 (*)를 갖는 카운트 그룹별로 이름에서 A (*)> 1.

체크도 큰 경우, 같은 성별은 다음과 같습니다
이름 그룹 A에서에 의해 선택 이름, 성별, 백작 (*)를, 섹스 백작 (*)>를 갖는 1.

(ⅲ)
방법 A

ID 정수 @ @max 정수를 선언

cur_rows 메인 카운트 필드를 갖는 테이블로 그룹에서 선택 기본 필드 카운트 (*)에 대한 로컬 커서 선언 (*)> 1

열린 cur_rows

@ 아이디로 cur_rows를 가져, @ 최대

@@ FETCH_STATUS = 0 동안

시작

@max @max = -1을 선택

행 개수 @max 설정

기본 테이블에서 삭제 어디 필드 = @id

최대 @ @ 아이디로 cur_rows, 가져
끝을

가까운 cur_rows

세트의 행 개수 0

두 번째 방법

"중복은"한 모든 필드가 중복 레코드가 다른 필드는 반복하지 않을 수 있습니다 동안 두 번째는, 같은 이름 필드의 반복과 중복 기록 키 필드의 일부임을 완전히 중복 레코드이며, 두 개의 의미에 중복 레코드가 반복하거나 무시할 수 있습니다.

도 1은, 제 반복에 대해 상대적으로 쉽게 사용 해결

TABLENAME 구별 *를 선택

결과 세트는 중복 레코드없이 얻을 수 있습니다.

테이블에 중복 레코드를 제거해야하는 경우 (중복 1 예약) 다음과 같은 방법으로 제거 할 수 있습니다

TABLENAME에서 #Tmp로 구분 *를 선택

테이블 TABLENAME 드롭

#Tmp의에서 TABLENAME에 * 선택
드롭 테이블 #Tmp

반복되는 잘못 생성 된 테이블 디자인은 고유 인덱스 열이 해결 될 수있다 증가하는 것입니다 때문입니다.

다음 (2)는 이러한 중첩 문제는 일반적으로 반복 기록 동작의 첫 번째 레코드를 유지하기 위해 필요한

이름의 두 개의 필드를 얻기 중복 필드가있는 가정, 주소, 결과의 독특한 세트가 필요합니다

TABLENAME에서 #Tmp으로 선택 신원 autoID로서 INT (1,1) *

이름 autoID 의해 #Tmp 그룹에서 # Tmp2로 autoID 같은 분 (autoID)을 선택

* #Tmp에서 어디 autoID (#의 tmp2에서 autoID을 선택)를 선택합니다

, 마지막 선택 이름을 얻기 결과 집합을 반복하지 주소 (하지만이 칼럼 SELECT 절에 기록 할 수있는 autoID 필드보다 더 실제 작성을 생략)

(D)
문의 반복

여기서 ID TABLENAME에서 ID를 선택 (에이 SELECT * FROM tablename

ID별로 그룹화

카운트를 갖는 (ID)> (1)

)

3 추가 검색 테이블이 반복적으로 기록된다 (하나 개 이상의 필드)
SELECT * 이력서 (A)로부터
(a.peopleId, a.seq)에서 (*)> (이력서, SEQ에서 peopleid 의해 HAVING COUNT를 SEQ 그룹 peopleid를 선택한다. 1)

실행은 (a.peopleId이 a.seq)이 같은 패스가 발행 쓰기 문제를 야기! ! !

추천

출처www.cnblogs.com/hyhy904/p/10987448.html