[SQL] T-SQL : 모든 중복 행을 삭제하지만 하나를 유지 [중복]
SQLT-SQL : 모든 중복 행을 삭제하지만 하나를 유지 [중복]
나는 행의 매우 많은 양의 테이블을 가지고있다. 중복은 허용하지만 행이 내가이 테이블에서 일부 중복이 알고 생성 된 방법에 문제로 인해되지 않습니다. 나는 키 컬럼의 관점에서 여분의 행을 제거해야합니다. 일부 다른 열이 약간 다른 데이터가있을 수 있습니다하지만 난 그것에 대해 걱정하지 않는다. 나는 아직도 그러나 이러한 행 중 하나를 유지해야합니다. 이 모든 열에서 작동하기 때문에 DISTINCT 의지하지 작업을 선택하고 나는 키 열을 기반으로 억제 중복 할 필요가있다.
어떻게 여분의 행을 삭제할 수 있지만 여전히 효율적으로 일을 계속?
해결법
-
==============================
1.당신은 당신이 사용했던 버전을 언급하지 않았지만, SQL 2005 이상, 당신은 OVER 절 공통 테이블 식을 사용할 수 있습니다. 그것은이 같은 작은 뭔가를 간다 :
당신은 당신이 사용했던 버전을 언급하지 않았지만, SQL 2005 이상, 당신은 OVER 절 공통 테이블 식을 사용할 수 있습니다. 그것은이 같은 작은 뭔가를 간다 :
WITH cte AS ( SELECT[foo], [bar], row_number() OVER(PARTITION BY foo, bar ORDER BY baz) AS [rn] FROM TABLE ) DELETE cte WHERE [rn] > 1
그것으로 주위를 재생하고 무엇을 얻을 참조하십시오.
(편집 : 도움이 될하기위한 시도에서, 누군가가 CTE 내에서 ORDER BY 절을 편집 명확하게하기 위해, 당신은 여기에 원하는 무엇이든으로 주문할 수는 CTE에 의해 반환 된 열 중 하나 일 필요는 없다 사실,.. 일반적인 사용의 경우는 여기에 "foo는, 바", "바즈"그룹 식별자는 타임 스탬프의 일종입니다. 최신을 유지하기 위해, 당신은 ORDER BY 바즈 내림차순 할 것)
-
==============================
2.예 쿼리 :
예 쿼리 :
DELETE FROM Table WHERE ID NOT IN ( SELECT MIN(ID) FROM Table GROUP BY Field1, Field2, Field3, ... )
다음 필드는 그룹에 중복 행을하고자하는 열이다.
-
==============================
3.여기에 내 트위스트는 실행 가능한 예제,입니다. 이드 고유 곳은 상황에서 작동합니다, 당신은 다른 열에서 중복 값이 있습니다.
여기에 내 트위스트는 실행 가능한 예제,입니다. 이드 고유 곳은 상황에서 작동합니다, 당신은 다른 열에서 중복 값이 있습니다.
DECLARE @SampleData AS TABLE (Id int, Duplicate varchar(20)) INSERT INTO @SampleData SELECT 1, 'ABC' UNION ALL SELECT 2, 'ABC' UNION ALL SELECT 3, 'LMN' UNION ALL SELECT 4, 'XYZ' UNION ALL SELECT 5, 'XYZ' DELETE FROM @SampleData WHERE Id IN ( SELECT Id FROM ( SELECT Id ,ROW_NUMBER() OVER (PARTITION BY [Duplicate] ORDER BY Id) AS [ItemNumber] -- Change the partition columns to include the ones that make the row distinct FROM @SampleData ) a WHERE ItemNumber > 1 -- Keep only the first unique item ) SELECT * FROM @SampleData
그리고 결과 :
Id Duplicate ----------- --------- 1 ABC 3 LMN 4 XYZ
확실하지 왜 먼저 무슨 생각이의 ... 확실히 갈 수있는 가장 간단한 방법 만 작동합니다.
from https://stackoverflow.com/questions/6025367/t-sql-deleting-all-duplicate-rows-but-keeping-one by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 어떻게 플라스크-SQLAlchemy의 응용 프로그램에서 원시 SQL을 실행합니다 (0) | 2020.03.22 |
---|---|
[SQL] 안드로이드 SQLite는의 날짜와 작업에 가장 좋은 방법은 [마감] (0) | 2020.03.22 |
[SQL] 설문 조사에 대한 데이터베이스 설계 [폐쇄] (0) | 2020.03.22 |
[SQL] HAVING 및 WHERE 사이의 차이점은 무엇입니까? (0) | 2020.03.22 |
[SQL] C #에서 데이터베이스에 여러 매개 변수를 추가 (0) | 2020.03.21 |