방법 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) 선택