2015-11-15 2 views
-1

У меня есть эта таблица:Удаления и удаление дубликатов записей в моей таблице

id | Name | Age 
================== 
1 | AAA | 22 
1 | AAA | 22 
2 | BBB | 33 
2 | BBB | 33 
2 | BBB | 33 
3 | CCC | 44 
4 | DDD | 55 

Мне нужно удалить из этой таблицы всех дубликатов записей и оставить только одну запись.

таблица будет выглядеть следующим образом:

id | Name | Age 
================== 
1 | AAA | 22 
2 | BBB | 33 
3 | CCC | 44 
4 | DDD | 55 

Я работаю с SQL Server CE для мобильных

Благодаря

ответ

1

простой способ в SQL Server заключается в использовании обновляемых КТР:

with todelete as (
     select t.*, 
      row_number(*) over (partition by id, name, age) as seqnum 
     from t 
    ) 
delete todelete where seqnum > 1; 

Увы, это не работает в SQL Server CE. Потому что ваши строки не имеют уникальный идентификатор, я думаю, вам нужно создать временную таблицу и использовать метод, как это:

create table temp_t (
    id int, 
    name varchar(255), 
    age int 
    ); 

insert into temp_t select distinct * from t; 

delete t; 

insert into t select * from temp_t; 

Другой метод использует дополнительный столбец вместо дополнительной таблицы:

alter table t add tokeep int; 

insert into t(id, name, age, tokeep) 
    select distinct id, name, age, 1 
    from t; 

delete from t where tokeep is null; 

alter table drop column tokeep; 

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

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