В SQL, как я могу удалить повторяющиеся строки на основе нескольких столбцов?
Я знаю, что могу выполнить следующий запрос ниже, чтобы найти "повторяющиеся" строки, основанные на нескольких столбцах, делающих что-то вроде этого:
SELECT PosId, OrgId
FROM PosOrg
GROUP BY PosId, OrgId
HAVING COUNT(*) > 1
но теперь я хочу удалить повторяющиеся строки, чтобы приведенный выше запрос завершился возвращением нулевых строк. Мне все равно, какие из строк, которые я удаляю (до тех пор, пока остается только одна строка в зависимости от уникальности этих двух столбцов.
Как правильно удалить эти дубликаты в SQL?
2 ответа
Решение
Если у вас есть еще один уникальный id
колонка вы можете сделать
delete from PosOrg
where id not in
(
SELECT min(id)
FROM PosOrg
GROUP BY PosId, OrgId
)
;WITH CTE
AS (
SELECT PosId
,OrgId
,ROW_NUMBER() OVER (PARTITION BY PosId , OrgId ORDER BY PosId , OrgId) rn
FROM PosOrg
)
DELETE FROM CTE
WHERE rn > 1