1

多次提出並回答了類似的問題。從我所能找到的信息來看,它們都是特定於特定的SQL實現(Oracle,SQL Server等)還是依賴臨時表(其中結果最初將被複制)。如何從沒有唯一鍵的只有「普通」SQL和沒有臨時表的表中刪除重複行?

我不知道他們是不是平臺無關的純DML解決方案(只是一個DELETE聲明)的

示例數據:表A單個字段。

--------- 
|account| 
|-------| 
| A22 | 
| A33 | 
| A44 | 
| A22 | 
| A55 | 
| A44 | 
--------- 

以下SQL Fiddle示出了基於ROWID僞列Oracle的特定解決方案。它不適用於任何其他數據庫,並且在這裏僅作爲示例顯示。

+0

您希望使用哪種RDBMS? – Rachcha

+0

我不認爲有一個數據庫獨立的方式來寫這個。 –

+0

我希望它可以在所有(或儘可能多)關係數據庫上工作。 –

回答

0

唯一的獨立於平臺的方式,我能想到的是將數據存儲在一個輔助表,截斷第一,並加載它放回:

create table _tableA (
    AccountId varchar(255) 
); 

insert into _TableA 
    select distinct AccountId from TableA; 

truncate table TableA; 

insert into TableA 
    select AccountId from _TableA; 

drop table _TableA; 

如果你有一個列,它是獨特的每個帳戶或放寬SQL的方言,那麼你可以找到一個單一的查詢解決方案。

+0

是的,這個解決方案是全能的。 –

相關問題