>  기사  >  데이터 베이스  >  SQL에서 중복 쿼리를 제거하는 방법

SQL에서 중복 쿼리를 제거하는 방법

coldplay.xixi
coldplay.xixi원래의
2020-10-10 11:37:2915935검색

SQL 중복 제거 쿼리 방법: 단일 필드 peopleId를 기준으로 중복 레코드를 판단하고 명령문을 사용하여 삭제합니다. 코드는 [여기서 peopleId는 (peopleId별로 people 그룹에서 peopleId 선택)]입니다.

SQL에서 중복 쿼리를 제거하는 방법

SQL 중복 제거 쿼리 방법:

중복 레코드를 제거하기 위한

sql 단일 테이블/다중 테이블 쿼리

단일 테이블 구별

여러 테이블 그룹 기준

그룹 기준은 주문 기준 및 제한 이전에 배치되어야 하며, 그렇지 않으면 오류가 보고됩니다

1. 테이블에서 초과된 부분 찾기 중복 레코드, 단일 필드(peopleId)를 기준으로 중복 레코드 판단

select * from people
where peopleId in (select  peopleId  from  people  group  by  peopleId  having  count(peopleId) > 1)

2. 테이블에서 중복된 중복 레코드를 삭제하고, 단일 필드(peopleId)를 기준으로 중복 레코드를 판단하고, rowid가 가장 작은 레코드

delete from people
where peopleId  in (select  peopleId  from people  group  by  peopleId   having  count(peopleId) > 1)
and rowid not in (select min(rowid) from  people  group by peopleId  having count(peopleId )>1)

3. 테이블

select * from vitae a
where (a.peopleId,a.seq) in  (select peopleId,seq from vitae group by peopleId,seq  having count(*) > 1)

에서 중복된 중복 레코드(다중 필드)를 찾습니다. 4. 테이블에서 중복된 중복 레코드(다중 필드)를 삭제하고 rowid가 가장 작은 레코드만 남깁니다

delete from vitae a
where (a.peopleId,a.seq) in  (select peopleId,seq from vitae group by peopleId,seq having count(*) > 1)
and rowid not in (select min(rowid) from vitae group by peopleId,seq having count(*)>1)

5. 가장 작은 rowid

select * from vitae a
where (a.peopleId,a.seq) in  (select peopleId,seq from vitae group by peopleId,seq having count(*) > 1)
and rowid not in (select min(rowid) from vitae group by peopleId,seq having count(*)>1)

(2)

를 제외하고 테이블 레코드(여러 필드)에서 중복된 중복 항목을 찾습니다. 예를 들어

테이블 A에 "name" 필드가 있고

" 서로 다른 레코드 간의 name" 값은 동일할 수 있으므로,

이제 테이블의 레코드 중 "name" 값이 중복되는 항목을 확인해야 합니다.

Select Name,Count(*) From A Group By Name Having Count(*) > 1

성별도 동일한지 확인하면

Select Name,sex,Count(*) From A Group By Name,sex Having Count(*) > 1

declare @max integer,@id integer
declare cur_rows cursor local for select 主字段,count(*) from 表名 group by 主字段 having count(*) >; 1
open cur_rows
fetch cur_rows into @id,@max
while @@fetch_status=0
begin
select @max = @max -1
set rowcount @max
delete from 表名 where 主字段 = @id
fetch cur_rows into @id,@max
end
close cur_rows
set rowcount 0

(3)

방법 1

select distinct * from tableName

방법 2

"중복 레코드는 두 가지 의미를 가지고 있습니다. 하나는 완전 중복 레코드, 즉 모든 필드가 반복되는 레코드, 다른 하나는 이름 필드 등 일부 핵심 필드가 반복되는 레코드이지만 다른 필드는 반드시 중복되지 않거나 무시할 수 있습니다.

1. 첫 번째 유형의 중복은 해결하기가 더 쉽습니다.

select distinct * into #Tmp from tableName
drop table tableName
select * into tableName from #Tmp
drop table #Tmp

를 사용하여 중복 레코드가 없는 결과 집합을 가져옵니다.

테이블을 삭제해야 하는 경우 다음과 같이 중복 레코드(하나의 중복 레코드가 유지됨)를 삭제할 수 있습니다.

select identity(int,1,1) as autoID, * into #Tmp from tableName
select min(autoID) as autoID into #Tmp2 from #Tmp group by Name,autoID
select * from #Tmp where autoID in(select autoID from #tmp2)

이 중복의 이유는 테이블 디자인이 좋지 않기 때문입니다.

2. 이러한 유형의 중복 문제는 일반적으로 중복 레코드 중 첫 번째 레코드를 유지해야 해결됩니다. 작업 방법은 다음과 같습니다.

중복 필드는 이름이라고 가정합니다.

select * from tablename where id in (select id from tablename
group by id
having count(id) > 1
)

마지막 선택은 이름과 주소가 반복되지 않습니다. 결과 세트(그러나 추가 autoID 필드가 있으므로 선택 항목에서 이 열을 생략할 수 있습니다.

(4)

중복 쿼리
select * from vitae a
where (a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq having count(*) > 1)

3. 테이블에서 중복된 레코드를 찾습니다(다중 필드). rrreee는 where(a.peopleId,a. seq)은 통과하지 못할 것입니다! ! !

🎜관련 학습 권장 사항: 🎜SQL 비디오 튜토리얼🎜🎜🎜

위 내용은 SQL에서 중복 쿼리를 제거하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.