Как удалить дубли из БД? - 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.

  1. DELETE a.* - здесь a.* это обозначение всех столбцов таблицы Parse, которые будут удалены.
  2. FROM Parse a - здесь Parse a это название таблицы, из которой будут удалены дубликаты.
  3. , (SELECT b.idGroup, b.idPost , MIN(b.status) AS STATUS - здесь (SELECT b.idGroup, b.idPost , MIN(b.status) AS STATUS это подзапрос, который выбирает минимальное значение статуса для каждой группы и поста.
  4. FROM Parse b - здесь Parse b это название таблицы, из которой выбираются данные для подзапроса.
  5. GROUP BY idGroup, idPost - здесь GROUP BY idGroup, idPost это группировка данных по столбцам idGroup и idPost.
  6. ) c - здесь c это результат подзапроса, который используется в основном запросе.
  7. WHERE a.idGroup = c.idGroup - здесь a.idGroup = c.idGroup это условие, которое говорит, что должны быть удалены только те строки из таблицы Parse a, у которых значение idGroup совпадает со значением idGroup в таблице Parse c.
  8. AND a.idPost = c.idPost - здесь AND a.idPost = c.idPost это условие, которое говорит, что должны быть удалены только те строки из таблицы Parse a, у которых значение idPost совпадает со значением idPost в таблице Parse c.
  9. AND a.status > c.status - здесь AND a.status > c.status это условие, которое говорит, что должны быть удалены только те строки из таблицы Parse a, у которых значение статуса больше значения статуса в таблице Parse c. Таким образом, данный код удаляет дубликаты из таблицы Parse, основываясь на совпадении значений в столбцах idGroup, idPost и status.

Оцени полезность:

6   голосов , оценка 3.667 из 5