오라클에서 중복 레코드를 삭제하는 방법

PHPz
풀어 주다: 2023-04-04 10:00:03
원래의
7861명이 탐색했습니다.

오라클 데이터베이스에서는 데이터의 복잡성과 지속적인 변경으로 인해 중복 기록이 자주 발생하며, 이로 인해 시스템 오류가 발생하고 데이터의 무결성과 정확성에 영향을 미칩니다. 따라서 Oracle 데이터베이스에서 중복 레코드를 제거하는 것이 중요합니다.

중복 기록을 빠르게 삭제하는 데 도움이 되는 몇 가지 효과적인 방법은 다음과 같습니다.

1. DISTINCT 키워드 사용

방법 1: "DISTINCT" 키워드를 사용하여 테이블에서 중복 레코드를 빠르게 삭제할 수 있습니다.

DELETE FROM table_name
WHERE rowid NOT IN (SELECT MIN(rowid) FROM table_name GROUP BY column1, column2, ..., column_n);
로그인 후 복사

이 SQL 문에서 "DISTINCT" 키워드는 열은 간단한 집합처럼 결합되어 중복된 기록을 찾을 수 있습니다. 데이터의 정확성을 보장하기 위해 SELECT 및 GROUP BY 문을 사용하여 중복 레코드를 찾아 삭제합니다.

참고: 단일 열의 경우 다음 SQL 코드를 사용할 수 있습니다.

DELETE FROM table_name
WHERE rowid NOT IN (SELECT MIN(rowid) FROM table_name GROUP BY column_name);
로그인 후 복사

두 번째, ROW_NUMBER() 함수 사용

방법 2: ROW_NUMBER() 함수는 분할 기술을 사용하여 중복 레코드를 식별하고 삭제할 수 있습니다.

DELETE FROM table_name
WHERE rowid IN (
  SELECT row_id FROM (
    SELECT rowid row_id,
    ROW_NUMBER() OVER (PARTITION BY column2, column3 ORDER BY column1) duplicate_records_count
    FROM table_name
  ) WHERE duplicate_records_count > 1
);
로그인 후 복사

이 SQL 문에서는 "ROW_NUMBER()" 함수를 사용하여 중복 레코드를 식별하고 첫 번째 중복 레코드를 "1"로 표시하여 중복 표시된 다른 레코드를 삭제하는 데 도움을 줍니다. 파티셔닝 기술은 동일한 기록을 그룹화하고 그룹별로 정렬하여 데이터의 정확성을 보장합니다.

3. EXISTS 하위 쿼리 사용

방법 3: EXISTS 하위 쿼리는 WHERE 절을 사용하여 중복 레코드를 삭제할 수 있습니다.

DELETE table_name a
WHERE EXISTS (
  SELECT 1 FROM table_name b
  WHERE b.column1 = a.column1 AND b.column2 = a.column2 AND b.column3 = a.column3 AND b.rowid > a.rowid
);
로그인 후 복사

이 SQL 문에서 "EXISTS" 하위 쿼리는 현재 행(예: "a")에 있습니다. 동일한 값으로 기록됩니다. 중복 레코드이므로 ROWID가 다릅니다. 따라서 ROWID a가 ROWID b보다 크면 중복된 레코드를 삭제할 수 있습니다.

4. 집합 연산자 사용

방법 4: 집합 연산자를 "SELECT" 및 "UNION ALL" 연산자와 결합하여 중복 레코드를 찾고 삭제할 수 있습니다.

DELETE FROM table_name
WHERE ROWID IN (
  SELECT ROWID FROM (
    SELECT column1, column2, column3, COUNT(*) duplicates
    FROM table_name
    GROUP BY column1, column2, column3
    HAVING COUNT(*) > 1
    UNION ALL
    SELECT column1, column2, column3, COUNT(*) duplicates
    FROM table_name
    GROUP BY column1, column2, column3
    HAVING COUNT(*) = 1
  ) a
  WHERE a.duplicates > 1
)
로그인 후 복사

이 SQL 문에서 "UNION ALL" 연산자는 두 개의 SELECT 문을 결합하여 중복 레코드와 중복되지 않은 레코드를 찾습니다. HAVING 절은 중복 개수가 있는 레코드를 필터링하고 삭제하는 데 사용됩니다.

결론적으로 Oracle 데이터베이스에서 중복 레코드를 제거하려면 다양한 방법과 기술을 사용할 수 있습니다. 필요에 따라 적절한 방법을 쉽게 선택하세요. 중복 기록을 삭제하는 경우 시스템 데이터의 무결성과 정확성을 보호하는 데 주의를 기울이십시오.

위 내용은 오라클에서 중복 레코드를 삭제하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!