Как удалить дубликаты и оставить одну строку в таблице - sql - PullRequest
1 голос
/ 08 апреля 2020

У меня есть таблица, которая выглядит следующим образом. Я хочу удалить дубликаты и оставить одну строку для каждого пользователя. Как я go об этом?

* Таблица **

id     user 
Thango   1

Thango  1 

Samg     2

Samg     2

Результаты

идентификатор пользователя

Thango   1

Samg     2

Ответы [ 2 ]

2 голосов
/ 08 апреля 2020

Для этого набора данных, вероятно, проще просто очистить и снова заполнить таблицу:

-- deduplicate into a temporary table
create table mytmp as select distinct id, user from mytable;

-- empty the original table (backup your data first!)
truncate table mytable;

-- refill the table from the temporary table
insert into mytable(id, user) select id, user from mytmp;

-- drop the temporary table
drop table mytemp;

Как только это будет сделано, вы можете рассмотреть возможность создания ограничения unique для таблицы, чтобы избежать дальнейших дубликатов:

alter table mytable
    add constraint myconstraint
    unique (id, user);
0 голосов
/ 08 апреля 2020

Вы используете общие табличные выражения (CTE). Для лучшего объяснения я советую вам взглянуть на этот url

Возможное решение:

WITH CTE([user], 
duplicatecount)
AS (SELECT [user],
           ROW_NUMBER() OVER(PARTITION BY [user]
           ORDER BY [id]) AS DuplicateCount
    FROM dbo.[YourDataBase])
DELETE FROM CTE
WHERE DuplicateCount > 1
...