Під час роботи над проектом для свого портфоліо я завантажив базу даних для практики в 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