РАБОТАЕТ ДЛЯ ВСЕХ ВАРИАНТОВ / ЦВЕТОВ SQL (ТАКЖЕ РАБОТАЕТ В AWS REDSHIFT [POSTGRESQL])
1. Лучший метод удаления дубликатов -> с использованием CTE
WITH DUPLICATE_CTE AS
( SELECT KEY,COUNT(1) AS RANKED FROM <SCHEMANAME>.<TABLENAME>
GROUP BY KEY )
DELETE FROM DUPLICATE_CTE WHERE RANKED > 1
2. Простой метод -> Использование row_number () / rank, dens_rank () Функция
DELETE FROM <TABLE_ALIAS>
FROM (
SELECT <COLUMN_NAMES>,
ROW_NUMBER() OVER (PARTITION BY KEY) AS RANKED
FROM <SCHEMANAME>.<TABLENAME>
) <TABLE_ALIAS>
WHERE <TABLE_ALIAS>.RANKED >1
Это может оказаться более дорогостоящим, чем использование вышеуказанного
3.Миряне (он же LAME: p) Метод (самый общий метод для удаления совершенных дубликатов)
DROP TABLE IF EXISTS backupOfTheTableContainingDuplicates;
CREATE TABLE aNewEmptyTemporaryOrBackupTable
AS SELECT DISTINCT * FROM originalTableContainingDuplicates;
TRUNCATE TABLE originalTableContainingDuplicates;
INSERT INTO originalTableContainingDuplicates SELECT * FROM
aNewEmptyTemporaryOrBackupTable ;
DROP TABLE aNewEmptyTemporaryOrBackupTable ;
ОБЪЯСНЕНИЕ ВЫШЕГО СКРИПТА SQL
Итак,
1-й запрос гарантирует, что если у вас есть какая-либо резервная / временная таблица исходной таблицы, содержащая дубликаты, сначала удалите эту таблицу.
2-й запрос создает новую таблицу (временная / резервная) суникальные записи в исходной таблице, содержащие дубликаты, поэтому новая временная таблица совпадает с исходной таблицей МИНУС дублирующих записей.
3-й запрос усекает или очищает исходную таблицу.
4-йЗапрос, вставка или копирование всех уникальныхво временную таблицу переходит к исходной таблице, которая была недавно усечена (поэтому не имеет данных).После выполнения этого запроса исходная таблица будет заполнена уникальными данными, которые были во временной таблице.
5-й запрос удаляет / удаляет ненужную временную таблицу.
Таким образом, конечный результат равенисходная таблица содержит только УНИКАЛЬНЫЕ ЗАПИСИ и не содержит дубликатов.