Как удалить дубли из БД? - MySQL
Формулировка задачи:
Добрый день есть таблица Parse в ней поля idGroup idPost, хочу сделать эти два поля связанными но для этого нужно удалить дубли. в таблице есть еще одно поле status в нем число любое, но в случае если это дубликат то нужно оставить с цифрой 1.
Должно оставить в бд
Спасибо
idGroup idPost status 111 1 1 111 1 2 111 2 3 12 1 1 12 1 2
idGroup idPost status 111 1 1 111 2 3 12 1 1
Решение задачи: «Как удалить дубли из БД?»
textual
Листинг программы
DELETE a.* FROM Parse a , (SELECT b.idGroup, b.idPost , MIN(b.status) AS STATUS /* STATUS прописными буквами*/ FROM Parse b GROUP BY idGroup, idPost ) c WHERE a.idGroup = c.idGroup AND a.idPost = c.idPost AND a.status > c.status;
Объяснение кода листинга программы
В данном коде на языке SQL выполняется удаление дубликатов из таблицы Parse.
DELETE a.*- здесьa.*это обозначение всех столбцов таблицы Parse, которые будут удалены.FROM Parse a- здесьParse aэто название таблицы, из которой будут удалены дубликаты., (SELECT b.idGroup, b.idPost , MIN(b.status) AS STATUS- здесь(SELECT b.idGroup, b.idPost , MIN(b.status) AS STATUSэто подзапрос, который выбирает минимальное значение статуса для каждой группы и поста.FROM Parse b- здесьParse bэто название таблицы, из которой выбираются данные для подзапроса.GROUP BY idGroup, idPost- здесьGROUP BY idGroup, idPostэто группировка данных по столбцам idGroup и idPost.) c- здесьcэто результат подзапроса, который используется в основном запросе.WHERE a.idGroup = c.idGroup- здесьa.idGroup = c.idGroupэто условие, которое говорит, что должны быть удалены только те строки из таблицыParse a, у которых значение idGroup совпадает со значением idGroup в таблицеParse c.AND a.idPost = c.idPost- здесьAND a.idPost = c.idPostэто условие, которое говорит, что должны быть удалены только те строки из таблицыParse a, у которых значение idPost совпадает со значением idPost в таблицеParse c.AND a.status > c.status- здесьAND a.status > c.statusэто условие, которое говорит, что должны быть удалены только те строки из таблицыParse a, у которых значение статуса больше значения статуса в таблицеParse c. Таким образом, данный код удаляет дубликаты из таблицы Parse, основываясь на совпадении значений в столбцах idGroup, idPost и status.