SQL запрос на удаление полных дубликатов
Есть таблица. В ней есть строки которые полностью дублируются. Мне нужно удалить все дубли. Как для этого составить запрос?
| product_id | key | value |
|---|---|---|
| 2 | ключ_2 | значение_2 |
| 2 | ключ_2 | значение_2 |
| 3 | ключ_3 | значение_3 |
| 2 | ключ_2 | значение_2 |
| 4 | ключ_4 | значение_4 |
| 4 | ключ_4 | значение_4 |
Так делаю запрос чтобы выбрать дубликаты строк:
SELECT `product_id`, `key`, count(*)
FROM `eva_ms2_product_options`
WHERE `key` = 'mat_kovrika'
GROUP BY `product_id`
HAVING count(*) > 1
Ответы (2 шт):
Автор решения: Andrew Holovko
→ Ссылка
Выбираете все записи уникальные записи.
SELECT *
FROM eva_ms2_product_options
GROUP BY product_id, key, value
Дальше удаляете все записи из таблицы и вставляете эти.
Автор решения: Merlin
→ Ссылка
DELETE
FROM eva_ms2_product_options
WHERE EXISTS (SELECT *
FROM (SELECT *, row_number() OVER (PARTITION BY product_id,key,value) AS rw
FROM eva_ms2_product_options)f1
WHERE f1.rw > 1
AND eva_ms2_product_options.product_id=f1.product_id
AND eva_ms2_product_options.key=f1.key
AND eva_ms2_product_options.value=f1.value)
p.s. почему в условии не через IN? - может удалить вообще все записи если ничего не найдёт
p.s.s. первый eva_ms2_product_options можно как-то обозвать, чтобы не запутаться, но на SQLLite не дал мне это сделать, от субд видимо зависит.