1

Подобные вопросы были заданы несколько раз. Из того, что я мог найти, они были либо специфичны для конкретной реализации SQL (Oracle, SQL Server и т. Д.), Либо полагались на временную таблицу (где результат был первоначально скопирован).Как удалить повторяющиеся строки из таблицы без уникального ключа только с «простым» SQL и без временных таблиц?

Интересно, является ли их независимым от платформы чистым решением DML (всего одно заявление DELETE).

Образец данных: Таблица A с одним полем.

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

Следующая SQL Fiddle показывает Oracle-конкретное решение, основанное на ROWID псевдо-колонки. Он не будет работать для какой-либо другой базы данных и показан здесь как пример.

+0

В каких СУБД вы хотите работать? – 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

Да, это решение все-таки SO. –

 Смежные вопросы

  • Нет связанных вопросов^_^