중복을 찾기 위해 T-SQL 코드를 얻는 방법은 무엇입니까?
MS Access에는 중복 된 행을 찾기위한 SQL 코드를 생성하는 버튼이 있습니다. SQL Server 2005/2008 Managment Studio에이 기능이 있는지 모르겠습니다.
있다면, 어디를 가리켜주세요
그렇지 않은 경우 이와 같은 코드를 작성하기 위해 T-SQL 도우미를 어떻게 가질 수 있는지 알려주십시오.
글쎄, 테이블에 전체 행이 중복되어 있다면 적어도 해당 테이블에 대한 기본 키가 설정되지 않은 것입니다. 그렇지 않으면 적어도 기본 키 값이 다를 것입니다.
그러나 다음은 일련의 열에 대해 중복을 가져 오는 SQL을 빌드하는 방법입니다.
SELECT col1, col2, col3, col4
FROM table
GROUP BY col1, col2, col3, col4
HAVING COUNT(*) > 1
이렇게하면 col1-col4 열에 대해 동일한 값 조합이 두 번 이상있는 행을 찾습니다.
예를 들어 다음 표에서 2 + 3 행은 중복됩니다.
PK col1 col2 col3 col4 col5
1 1 2 3 4 6
2 1 3 4 7 7
3 1 3 4 7 10
4 2 3 1 4 5
두 행은 col1-col4 열에서 공통 값을 공유하므로 해당 SQL에서 중복으로 간주됩니다. 이를 분석하려는 모든 열을 포함하도록 열 목록을 확장합니다.
SQL Server 2005+를 사용하는 경우 다음 코드를 사용하여 다른 열과 함께 모든 행을 볼 수 있습니다.
SELECT *, ROW_NUMBER() OVER (PARTITION BY col1, col2, col3, col4 ORDER BY (SELECT 0)) AS DuplicateRowNumber
FROM table
이 기술을 사용하여 중복을 삭제 (또는 다른 방법으로 작업) 할 수도 있습니다.
WITH cte AS
(SELECT *, ROW_NUMBER() OVER (PARTITION BY col1, col2, col3, col4 ORDER BY (SELECT 0)) AS DuplicateRowNumber
FROM table
)
DELETE FROM cte WHERE DuplicateRowNumber > 1
ROW_NUMBER는 매우 강력합니다. 이것으로 할 수있는 일이 많이 있습니다. http://msdn.microsoft.com/en-us/library/ms186734.aspx 에서 BOL 기사를 참조하십시오 .
하나 이상의 중복 필드가있는 전체 행을 덤프해야 할 때이 솔루션을 찾았지만 테이블의 모든 필드 이름을 입력하고 싶지는 않습니다.
SELECT * FROM db WHERE col IN
(SELECT col FROM db GROUP BY col HAVING COUNT(*) > 1)
ORDER BY col
AFAIK, 그렇지 않습니다. 테이블의 모든 필드를 기준으로 select 문을 그룹화하고 개수가 1보다 큰 having 절을 사용하여 필터링하면됩니다.
키를 제외하고 행이 중복 된 경우 선택 필드에 키를 포함하지 마십시오.
이를 수행 할 수있는 또 다른 방법은 테이블을 결합하는 것입니다.
SELECT *
FROM dbo.TableA aBase
JOIN dbo.TableA aDupes ON aDupes.ColA = aBase.ColA AND
aDupes.ColB = aBase.ColB
WHERE aBase.Pkey < aDupes.Pkey
참고 : aBase.Pkey <aDupes.Pkey는 조건이 항상 두 번 참이기 때문에 테이블 자체를 조인하면 일치 당 두 개의 행이 생성되기 때문에 존재합니다.
즉, 테이블 aBase에 aDupes의 행 (ColA 및 ColB 기반)과 동일한 행이있는 경우 해당 일치의 반영도 true가됩니다. 즉, aDupes에는 ColA 및 ColB를 기반으로하는 행 aBase와 동일한 행이 있습니다. 따라서 두 일치 항목이 모두 결과 집합에 반환됩니다.
테이블 중 하나에 더 낮은 키가있는 모든 결과를 임의로 선택하여이 반영을 좁히거나 제거합니다.
키가 다르면 <또는>는 중요하지 않습니다.
또한 aBase.Pkey <aDupes.Pkey 는 기본 키가 달라 지도록 강제 하기 때문에 행과 일치하는 항목을 필터링하는 작업도 처리 합니다.
참조 URL : https://stackoverflow.com/questions/1222581/how-get-the-t-sql-code-to-find-duplicates
'programing' 카테고리의 다른 글
운영자 '??' (0) | 2021.01.16 |
---|---|
.emacs에 무엇이 있습니까? (0) | 2021.01.16 |
cocoaLumberjack을 사용하여 로그 파일이 저장되는 위치 (0) | 2021.01.16 |
왜 new String (“”)은 컴파일되지만 char c = ''는 컴파일되지 않습니까? (0) | 2021.01.16 |
httpd 서버가 시작되지 않음 : (13) 권한이 거부 됨 : make_sock : 주소 [::] : 88에 바인딩 할 수 없습니다. (0) | 2021.01.16 |