这里已经多次提出并回答了类似的问题。根据我的发现,它们要么特定于特定的SQL实现(Oracle,SQL Server等),要么依赖于临时表(最初将复制结果)。
我想知道它们是否是一个独立于平台的纯DML解决方案(只是一个DELETE
语句)。
示例数据:表A ,包含单个字段。
---------
|account|
|-------|
| A22 |
| A33 |
| A44 |
| A22 |
| A55 |
| A44 |
---------
以下SQL Fiddle显示了基于ROWID
伪列的特定于Oracle的解决方案。它不适用于任何其他数据库,仅作为示例显示。
答案 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的方言,那么您可以找到一个查询解决方案。