>데이터 베이스 >MySQL 튜토리얼 >고유 식별자 없이 테이블에서 중복 행을 효율적으로 제거하는 방법은 무엇입니까?

고유 식별자 없이 테이블에서 중복 행을 효율적으로 제거하는 방법은 무엇입니까?

Susan Sarandon
Susan Sarandon원래의
2025-01-23 01:41:08645검색

How to Efficiently Remove Duplicate Rows from a Table Without Unique Identifiers?

고유 식별자 없이 중복 행을 효율적으로 제거

데이터 테이블에 고유한 행 식별자가 없으면 중복 항목을 제거하는 것이 어려울 수 있습니다. 이 문서에서는 행의 첫 번째 항목을 유지하면서 중복 행을 제거하는 효율적인 솔루션을 제공합니다.

중복 행이 있는 테이블을 살펴보겠습니다.

col1 col2 col3 col4 col5 col6 col7
john 1 1 1 1 1 1
john 1 1 1 1 1 1
sally 2 2 2 2 2 2
sally 2 2 2 2 2 2

중복 행을 제거한 후 원하는 결과는 다음과 같습니다.

col1 col2 col3 col4 col5 col6 col7
john 1 1 1 1 1 1
sally 2 2 2 2 2 2

CTE 및 ROW_NUMBER를 사용하는 솔루션

이 방법은 공통 테이블 표현식(CTE)과 ROW_NUMBER() 함수를 활용합니다. CTE는 특정 순서에 따라 각 행에 시퀀스 번호(RN)를 할당하므로 중복 항목을 식별하고 제거할 수 있습니다.

다음은 단계별 지침이 포함된 SQL 쿼리입니다.

<code class="language-sql">WITH CTE AS (
   SELECT [col1], [col2], [col3], [col4], [col5], [col6], [col7],
       RN = ROW_NUMBER() OVER (PARTITION BY col1 ORDER BY col1) -- 为 col1 定义的每个组内分配序列号
   FROM dbo.Table1
)
DELETE FROM CTE WHERE RN > 1; -- 删除 RN 大于 1 的行(表示重复项)</code>

지침:

  • CTE 생성: WITH 문은 테이블의 열을 포함하는 CTE라는 CTE를 생성하고 ROW_NUMBER() 함수를 사용하여 각 행에 RN 값을 할당합니다. PARTITION BY 절은 col1 열을 기준으로 행을 그룹화하고 각 그룹 내에서 정렬하여 순서를 결정합니다.
  • ROW_NUMBER() 함수: ROW_NUMBER() 함수는 PARTITION BY 절로 정의된 각 파티션 내의 각 행에 대해 1부터 시작하는 정수 시퀀스를 생성합니다.
  • 삭제 작업: DELETE 문은 CTE에서 RN이 1보다 큰 행을 삭제하여 중복 행을 제거합니다.

출력:

쿼리를 실행한 후 업데이트된 테이블에는 다음이 포함됩니다.

col1 col2 col3 col4 col5 col6 col7
john 1 1 1 1 1 1
sally 2 2 2 2 2 2

위 내용은 고유 식별자 없이 테이블에서 중복 행을 효율적으로 제거하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.