집 >데이터 베이스 >MySQL 튜토리얼 >고유 식별자 없이 테이블에서 중복 행을 효율적으로 제거하는 방법은 무엇입니까?
고유 식별자 없이 중복 행을 효율적으로 제거
데이터 테이블에 고유한 행 식별자가 없으면 중복 항목을 제거하는 것이 어려울 수 있습니다. 이 문서에서는 행의 첫 번째 항목을 유지하면서 중복 행을 제거하는 효율적인 솔루션을 제공합니다.
중복 행이 있는 테이블을 살펴보겠습니다.
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>
지침:
출력:
쿼리를 실행한 후 업데이트된 테이블에는 다음이 포함됩니다.
col1 | col2 | col3 | col4 | col5 | col6 | col7 |
---|---|---|---|---|---|---|
john | 1 | 1 | 1 | 1 | 1 | 1 |
sally | 2 | 2 | 2 | 2 | 2 | 2 |
위 내용은 고유 식별자 없이 테이블에서 중복 행을 효율적으로 제거하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!