2017-10-10 12 views
0

테이블이 있는데 ID 열이 없습니다. 중복 행을 어떻게 제거 할 수 있습니까?sybase IQ에서 중복 행을 제거하려면 어떻게해야합니까?

나는 시도했다이 하나

with cte(rwn,name, lastname,dt) as(
       select ROW_NUMBER() over(partition by name, lastname,dt order by name) as rwn,name, lastname,dt from duplicateRowDelete 
      ) 
    delete cte where cte.rwn <> 1 

그것은 오류가 발생합니다 : SQL Anywhere를 오류 -131을 : 구문 오류 '삭제'근처에 줄에 4

답변

0

사이베이스 IQ는 업데이트 할 열팽창 계수를 지원하지 않는 경우 또는 하위 쿼리를 사용하면 어려워집니다. 한 가지 방법은 테이블을 다시 만드는 것입니다. 나는 이것이 작동 할 것이라고 생각한다 :

select * 
into #tempt 
from (select t.*, 
      row_number() over (partition by name, lastname, dt order by name) as seqnum 
     from duplicateRowDelete 
    ) t 
where seqnum = 1; 

truncate table duplicateRowDelete; 

insert into duplicateRowDelete(name, lastname, dt, . . .) 
    select name, lastname, dt, . . . 
    from #tempt; 

이것은 테이블의 중요한 부분을 삭제해야 할 때 더 빠르다는 장점이있다.

+0

테이블을 삭제하면 안됩니다. –

+0

@ SelçukKılınç. . . 이 테이블을 삭제하지 않습니다. 그것을 비우고 그것을 다시로드합니다. –

+0

상당히 위험 a) 모든 좋은 행을 #temp 테이블에 놓으십시오 (연결이 끊어지면 사라집니다). b) 원래 테이블의 내용을 100 % 보장하면서 원래 테이블의 내용을 지울 수 있습니다. , c) 트랜잭션 외부에서이 작업을 모두 수행하십시오 (이 설계로 모든 데이터가 손실 될 수 있음) – markp