В 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
Другие вопросы по тегам