SQL Server 에서 중복 데 이 터 를 삭제 하 는 몇 가지 방법
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
방법 2 는 두 가지 의미 의 중복 기록 이 있 습 니 다.하 나 는 완전히 중복 되 는 기록 입 니 다.즉,모든 필드 가 중복 되 는 기록 입 니 다.다른 하 나 는 일부 관건 적 인 필드 가 중복 되 는 기록 입 니 다.예 를 들 어 Name 필드 가 중복 되 거나 다른 필드 가 반드시 중복 되 거나 무시 할 수 있 습 니 다.1.첫 번 째 중복 에 대해 비교적 쉽게 해결 할 수 있 습 니 다.selectinct*from tableName 을 사용 하면 중복 기록 이 없 는 결과 집합 을 얻 을 수 있 습 니 다.이 표 가 중복 되 는 기록(중복 기록 보존 1 개)을 삭제 해 야 한다 면 다음 과 같은 방법 으로 삭제 할 수 있다
select distinct * into #Tmp from tableName
drop table tableName
select * into tableName from #Tmp
drop table #Tmp
이러한 중복 이 발생 하 는 원인 은 표 디자인 이 주도면밀 하지 않 아서 발생 한 것 이 고 유일한 색인 열 을 추가 하면 해결 할 수 있다.2.이러한 중복 문 제 는 보통 중복 기록 의 첫 번 째 기록 을 보존 해 야 합 니 다.조작 방법 은 다음 과 같 습 니 다.중복 되 는 필드 가 Name,Address 라 고 가정 하고 이 두 필드 의 유일한 결과 집합 인 selection idenity(int,1,1)as autoID,*into\#Tmp from table Name selectmin(autoID)as autoID into\#Tmp 2 from\#Tmp group by Name 을 받 아야 합 니 다.autoID select*from\#Tmp where autoID in(select autoID from\#tmp 2)마지막 select 는 Name 을 얻 었 습 니 다.Address 는 중복 되 지 않 는 결과 집합 입 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Redash를 사용할 때 몰랐던 SQL을 쓰는 법을 배웠습니다.최근 redash에서 sql을 쓸 기회가 많고, 이런 쓰는 방법이 있었는지와 sql에 대해 공부를 다시하고 있기 때문에 배운 것을 여기에 씁니다. Redash란? 월별로 데이터를 표시하고 싶습니다 주별로 데이터를 표...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.