이 페이지는 기계 번역되었습니다. 영어 원본을 읽어보세요. English

IBSurgeon 라이브러리

Firebird 데이터베이스에서 중복 레코드를 찾고 삭제하는 방법

DELETE 명령은 (SQL 표준에 정의된 대로) 항상 조건을 만족하는 모든 레코드를 삭제합니다. 일반적으로 우리는 중복 항목 중 하나를 남기고 나머지를 삭제하려고 합니다. 이를 위해 Firebird 데이터베이스에서 암시적 물리적 레코드 번호인 RDB$DB_KEY를 사용하여 동일한 레코드 간에 인위적인 차이를 만들 수 있습니다.

DELETE FROM XXX T1 WHERE EXISTS (SELECT * FROM XXX T2 WHERE (T2.column1 = T1.column1 or (T2.column1 is null and T2.column1 is null)) AND (T2.column2 = T1.column2 or (T2.column2 is null and T2.column2 is null)) AND (.......) AND (T2.RDB$DB_KEY > T1.RDB$DB_KEY))

이 경우, 물리적 RDB$DB_KEY를 사용하여 지정된 필드(column1, column2 등)에서 동일한 내용을 가진 두 레코드를 구분하며, 더 큰 RDB$DB_KEY를 가진 레코드를 삭제합니다.

중복 항목을 찾으려면 RDB$DB_KEY 조건과 함께 다음 쿼리를 사용할 수 있습니다:

SELECT * FROM TABLE T1 WHERE EXISTS (SELECT FIELD FROM TABLE T2 WHERE T1.FIELD = T2.FIELD AND T1.RDB$DB_KEY != T2.RDB$DB_KEY)