Необходимо удалить дубликаты записей из таблицы, используя номер строки()
У меня есть тест таблицы, содержащий следующие данные, и я хочу удалить trsid 124, и у меня есть запись millions в моей БД, это просто scenarion. Концепция состоит в том, чтобы удалить дублирующую запись из таблицы
--------------------------------------------
TrsId | ID | Name |
--------------------------------------------
123 | 1 | ABC |
124 | 1 | ABC |
Я пытаюсь что-то вроде
delete from test
select T.* from
(
select ROW_NUMBER() over (partition by ID order by name) as r,
Trsid,
ID,
name
from test
) t
where r = 2
Даже если я обновлю запрос, который подходит для меня
update test set id=NULL
select T.* from
(
select ROW_NUMBER() over (partition by ID order by name) as r,
Trsid,
ID,
name
from test
) t
where r = 2
Но если я выполню оба этих запроса, он удалит все записи из таблицы test. И если я обновлю его, обновите обе записи. Я не знаю, что я делаю неправильно здесь
3 ответа:
WITH cte AS ( SELECT ROW_NUMBER() OVER(PARTITION by ID ORDER BY name) AS Row FROM test ) DELETE FROM cte WHERE Row > 1