[SQL] 특정 필드에 중복을 찾기 위해 문을 선택
SQL특정 필드에 중복을 찾기 위해 문을 선택
여러 필드에 중복을 찾기 위해 SQL 문으로 나를 도와 드릴까요?
예를 들어, 의사 코드 :
select count(field1,field2,field3)
from table
where the combination of field1, field2, field3 occurs multiple times
그리고 위의 진술에서 내가 첫 번째 제외한 모든 레코드를 선택하고 싶은 여러 번가있는 경우.
해결법
-
==============================
1.여러 레코드가있는 필드의 목록을 얻으려면, 당신은 사용할 수 있습니다 ..
여러 레코드가있는 필드의 목록을 얻으려면, 당신은 사용할 수 있습니다 ..
select field1,field2,field3, count(*) from table_name group by field1,field2,field3 having count(*) > 1
행을 삭제하는 방법에 대한 자세한 내용은이 링크를 확인하십시오.
http://support.microsoft.com/kb/139444
편집 : 다른 사용자가 언급 한 바와 같이, 당신은 위의 링크에있는 접근 방식을 사용하기 전에 "첫 번째 행"를 정의하는 방법을 결정하기위한 기준이 있어야한다. 당신이 필요한 경우 절과 하위 쿼리에 의해 주문을 사용해야합니다 것을 기준으로합니다. 당신은 몇 가지 샘플 데이터를 게시 할 수 있다면, 그것은 도움이 정말 것이다.
-
==============================
2.나는 당신이 당신의 데이터에 대한 주문의 어떤 종류가 있다고 가정 있도록, "처음"을 언급. 이제 데이터가 일부 필드 ID에 의해 정렬되어 있다고 가정하자.
나는 당신이 당신의 데이터에 대한 주문의 어떤 종류가 있다고 가정 있도록, "처음"을 언급. 이제 데이터가 일부 필드 ID에 의해 정렬되어 있다고 가정하자.
이 SQL은 첫 번째를 제외하고 당신에게 중복 된 항목을 얻어야한다. 그것은 기본적으로 (a) 동일한 필드와 (b)와 다른 행 낮은 ID가 존재하는 모든 행을 선택한다. 성능은 큰되지 않습니다, 그러나 당신의 문제를 해결할 수 있습니다.
SELECT A.ID, A.field1, A.field2, A.field3 FROM myTable A WHERE EXISTS (SELECT B.ID FROM myTable B WHERE B.field1 = A.field1 AND B.field2 = A.field2 AND B.field3 = A.field3 AND B.ID < A.ID)
-
==============================
3.이것은 내가 좋아하는 SQL 서버 2005 재미있는 솔루션입니다. 나는 "첫 번째 제외한 모든 레코드"에 의해 그 가정거야, 당신은 우리가 "최초의"인 행을 식별하는 데 사용할 수있는 또 다른 "ID"열이 있음을 의미한다.
이것은 내가 좋아하는 SQL 서버 2005 재미있는 솔루션입니다. 나는 "첫 번째 제외한 모든 레코드"에 의해 그 가정거야, 당신은 우리가 "최초의"인 행을 식별하는 데 사용할 수있는 또 다른 "ID"열이 있음을 의미한다.
SELECT id , field1 , field2 , field3 FROM ( SELECT id , field1 , field2 , field3 , RANK() OVER (PARTITION BY field1, field2, field3 ORDER BY id ASC) AS [rank] FROM table_name ) a WHERE [rank] > 1
-
==============================
4.중복 값을 확인하려면 :
중복 값을 확인하려면 :
with MYCTE as ( select row_number() over ( partition by name order by name) rown, * from tmptest ) select * from MYCTE where rown <=1
-
==============================
5.나중에 SQL Server 2005 또는를 사용하고 (당신의 질문에 대한 태그 2008 SQL 서버를 나타냅니다) 경우 조인 사용하는 몇 가지 이유로 바람직하지 또는 비현실적이다, 당신은 첫 번째 후 중복 레코드를 반환하는 순위 기능을 사용할 수 있습니다. 다음 예제 프로그램이 그것은 또한 조사 된 컬럼에 널 (null) 값으로 작동하는 조치이다.
나중에 SQL Server 2005 또는를 사용하고 (당신의 질문에 대한 태그 2008 SQL 서버를 나타냅니다) 경우 조인 사용하는 몇 가지 이유로 바람직하지 또는 비현실적이다, 당신은 첫 번째 후 중복 레코드를 반환하는 순위 기능을 사용할 수 있습니다. 다음 예제 프로그램이 그것은 또한 조사 된 컬럼에 널 (null) 값으로 작동하는 조치이다.
create table Table1 ( Field1 int, Field2 int, Field3 int, Field4 int ) insert Table1 values (1,1,1,1) , (1,1,1,2) , (1,1,1,3) , (2,2,2,1) , (3,3,3,1) , (3,3,3,2) , (null, null, 2, 1) , (null, null, 2, 3) select * from (select Field1 , Field2 , Field3 , Field4 , row_number() over (partition by Field1 , Field2 , Field3 order by Field4) as occurrence from Table1) x where occurrence > 1
모든 "그룹"중 첫 번째 레코드가 제외되어이 예제를 실행 한 후 공지 사항 및 널 (null) 값이 그 기록을 제대로 처리됩니다.
당신이 그룹 내에서 레코드를 주문하기 위해 사용할 수있는 열이없는 경우는 주문에 의한 열로 파티션별로 열을 사용할 수 있습니다.
-
==============================
6.
CREATE TABLE #tmp ( sizeId Varchar(MAX) ) INSERT #tmp VALUES ('44'), ('44,45,46'), ('44,45,46'), ('44,45,46'), ('44,45,46'), ('44,45,46'), ('44,45,46') SELECT * FROM #tmp DECLARE @SqlStr VARCHAR(MAX) SELECT @SqlStr = STUFF((SELECT ',' + sizeId FROM #tmp ORDER BY sizeId FOR XML PATH('')), 1, 1, '') SELECT TOP 1 * FROM ( select items, count(*)AS Occurrence FROM dbo.Split(@SqlStr,',') group by items having count(*) > 1 )K ORDER BY K.Occurrence DESC
-
==============================
7.각 SELECT 문 sepratley 수를 가지고이 쿼리를 시도 :
각 SELECT 문 sepratley 수를 가지고이 쿼리를 시도 :
select field1,count(field1) as field1Count,field2,count(field2) as field2Counts,field3, count(field3) as field3Counts from table_name group by field1,field2,field3 having count(*) > 1
from https://stackoverflow.com/questions/4434118/select-statement-to-find-duplicates-on-certain-fields by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 다중 언어 데이터베이스 설계를위한 최상의 방법은 무엇입니까? [닫은] (0) | 2020.03.23 |
---|---|
[SQL] 어떻게해야합니까 문자열로 출력 원시 SQL 쿼리에 쿼리 작성기를 가져옵니다? (0) | 2020.03.23 |
[SQL] 제 3 표에 자신의 FKS 2 개 테이블을 조인하는 데 필요 (0) | 2020.03.23 |
[SQL] 왜 SQL Server는 밀리 초를 잃고있다? (0) | 2020.03.22 |
[SQL] dplyr left_join 이하,보다 의해 조건보다 (0) | 2020.03.22 |