Видалення дублікатів у SQL

Під час роботи над проектом для свого портфоліо я завантажив базу даних для практики в SQL. Після того, як імпортував і обробив дані, я помітив, що в стовпці ID, який я планував перетворити на первинний ключ, були дублікати. Тому перед тим, як зробити цей стовпець первинним ключем, я спочатку мав прибрати дублікати.

Для цього я використав CTE (Common Table Expression), що дозволяє створити тимчасовий запит. Як тільки цей запит виконано, тимчасова таблиця буде видалена.

Я також застосував метод ROW_NUMBER, щоб нумерувати рядки результатів, та використав PARTITION BY для групування даних.

Приклад коду:

WITH duplicates AS (
SELECT *,
ROWNUMBER () OVER (PARTITION BY IDrevisao ORDER BY (SELECT NULL)) AS rn
FROM evaluations
)

Тут ORDER BY (SELECT NULL) вказує, що порядок елементів не має значення при поверненні результатів.

За допомогою цього запиту я створив тимчасову таблицю, яка містить всі дублікати в колонці ID_revisao. Для видалення цих дублікатів я використав команду DELETE, не забувши про фільтр WHERE, щоб не видалити зайвих даних.

Ось як виглядає остаточний запит для видалення дублікатів:

WITH duplicates AS (
SELECT *,
ROWNUMBER () OVER (PARTITION BY IDrevisao ORDER BY (SELECT NULL)) AS rn
FROM evaluations
)
DELETE FROM evaluations WHERE rn > 1;

Цей підхід дозволяє ефективно обробляти дублікати в базі даних, забезпечуючи правильну роботу з первинними ключами.

Перекладено з: REMOVER DUPLICADAS SQL