2017-10-10 101 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

如果Sybase IQ不支持可更新的CTE或子查詢,那麼這很困難。一種方法是重新創建表格。我認爲這將起作用:

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