> 데이터 베이스 > MySQL 튜토리얼 > 고유 ID 없이 테이블에서 중복 행을 삭제하는 방법은 무엇입니까?

고유 ID 없이 테이블에서 중복 행을 삭제하는 방법은 무엇입니까?

Barbara Streisand
풀어 주다: 2025-01-23 01:47:09
원래의
320명이 탐색했습니다.

How to Delete Duplicate Rows in a Table Without a Unique ID?

고유 ID가 없는 중복 행 제거

테이블에 고유한 행 식별자가 없는 경우 중복 행을 어떻게 제거할 수 있나요? 다음 데이터가 포함된 테이블이 있다고 가정해 보겠습니다.

<code>| 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 |</code>
로그인 후 복사

우리의 목표는 중복 행을 제거하고 다음을 남기는 것입니다.

<code>| col1 | col2 | col3 | col4 | col5 | col6 | col7 |
|---|---|---|---|---|---|---|
| john | 1 | 1 | 1 | 1 | 1 | 1 |
| sally | 2 | 2 | 2 | 2 | 2 | 2 |</code>
로그인 후 복사

고유 ID 누락 문제를 방지하는 안정적인 방법은 CTE(공용 테이블 표현식) 및 ROW_NUMBER() 함수를 사용하는 것입니다. 이 조합을 사용하면 삭제해야 할 행을 식별할 수 있습니다.

<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)
   FROM dbo.Table1
)
DELETE FROM CTE WHERE RN > 1</code>
로그인 후 복사

이 쿼리를 분석해 보겠습니다.

  • "CTE"라는 CTE는 ROW_NUMBER() 함수를 사용하여 "col1" 열을 기준으로 분할하는 동안 해당 열의 각 고유 값을 기반으로 행 번호를 계산합니다.
  • 그런 다음
  • DELETE 문은 행 번호(RN)가 1보다 큰 행을 삭제하여 중복 행을 제거합니다.

참고: 원본 게시물에 제공한 결과는 오타로 인해 달라질 수 있습니다. 위 출력은 예상된 결과를 나타냅니다.

이 기술의 유연성 덕분에 PARTITION BY 절에 여러 열을 포함할 수 있어 여러 조건 조합을 기반으로 중복 항목을 감지할 수 있습니다.

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

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