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

출처: 인터넷
작성자: 사용자
키워드: 네트워크 프로그래밍 데이터베이스 합성

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

A)

"이름" 필드에 테이블 A,
"이름" 값 다른 레코드 사이 동일 수 있습니다.
이제 해야 쿼리는 테이블의 레코드에는, "이름" 값 중복 항목;

선택 이름, 이름 하 여 그룹에서-는 count (*)는 count (*) > 1
같은 성별 또한 같은 경우 다음으로 큰.
선택 이름, 성, 이름, 성으로 그룹에서-는 count (*)는 count (*) > 1


2)
방법 1

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

Cur_rows를 닫습니다
ROWCOUNT 0 설정 방법 3

에 중복 기록, 하나는 완전히 중복 레코드, 즉, 모든 필드는 중복 레코드, 두 번째는 키 필드 중복 레코드 수, 이름 필드는 반복, 그리고 다른 분야는 반드시 반복 되지 않습니다 또는 반복 무시 될 수 있습니다.
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 번호 (10)
Emp_name VARCHAR2 (20)

급여 번호 (10,2)

다음 명령문에서 중복 레코드를 쿼리할 수 있습니다.

Sql > 선택 * 직원;


emp_id Emp_name 연봉

---------- ---------------------------------------- ----------

1 햇빛 10000

1 햇빛 10000

2 Semon 20000

2 Semon 20000

3 xyz 30000

2 Semon 20000

Sql > 개별 선택 * 직원;

emp_id Emp_name 연봉

---------- ---------------------------------------- ----------

1 햇빛 10000

2 Semon 20000

3 xyz 30000

Sql > 선택 * 직원 GROUP BY Emp_id, emp_name에서 급여는 수 (*) > 1

emp_id Emp_name 연봉

---------- ---------------------------------------- ----------

1 햇빛 10000

2 Semon 20000


Sql > 선택 * 직원 E1에서

어디 rowID에 (선택 최대 (ROWID) Employe e 2에서
어디 e1.emp_id=e2.emp_id 및

E1.emp_name=e2.emp_name 및 E1.salary=e2.salary);


emp_id Emp_name 연봉

---------- ---------------------------------------- ----------

1 햇빛 10000

3 xyz 30000

2 Semon 20000

추가

1, 테이블에서 중복 레코드 찾기, 중복 레코드가 단일 필드 (Peopleid)
선택에 의해 재판 된다 * 사람들이
어디 사람들 그룹에서에서 (선택 Peopleid에 Peopleid Peopleid에 의해 P는 수 (Peopleid) > 1)
2, 테이블에서 중복 레코드 삭제, 중복 레코드는 단일 필드 (Peopleid)에 근거, ROWID만을 떠나 최소한의 레코드
에서 삭제
어디 사람에 Peopleid (Peopleid에 의해 사람들이 그룹을 선택 Peopleid는 수 (Peopleid) > 1)
rowID n 에 오티 (Peopleid 사람들이 그룹화 선택 분 (rowid)은 수 (Peopleid) > 1) 테이블 (여러 필드)
3, 찾기 중복 레코드
선택 * 이력서에서는
어디 (A.PEOPLEID,A.SEQ)에서 (선택 Peopleid, PEOPLEID, SEQ 이력서 그룹화 seq는 count (*) > 1)
4, 이력서에서 ROWID 최소한의 레코드만
떠나 삭제 중복 레코드 (여러 필드), 테이블에서 삭제 한
어디 (A.PEOPLEID,A.SEQ) (선택 Peopleid, V에서 seq에 Itae 그룹 BY PEOPLEID, SEQ는 count (*) > 1)
및 (선택 (rowid)에서 분 이력서 그룹 Peopleid, se에에서 rowID Q는 count (*) > 1)

5, ROWID 최소 레코드
선택 제외한 테이블 (여러 필드)에서 중복 레코드 찾기 * 이력서에서는
어디 (A.PEOPLEID,A.SEQ) (선택 Peopleid, V에서 seq에 Itae 그룹 BY PEOPLEID, SEQ는 count (*) > 1)

관련 문서

연락처

이 페이지의 내용은 인터넷에서 가져온 것이므로 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.