Как удалить дубли из БД? - MySQL

Узнай цену своей работы

Формулировка задачи:

Добрый день есть таблица Parse в ней поля idGroup idPost, хочу сделать эти два поля связанными но для этого нужно удалить дубли. в таблице есть еще одно поле status в нем число любое, но в случае если это дубликат то нужно оставить с цифрой 1.
Листинг программы
  1. idGroup idPost status
  2. 111 1 1
  3. 111 1 2
  4. 111 2 3
  5. 12 1 1
  6. 12 1 2
Должно оставить в бд
Листинг программы
  1. idGroup idPost status
  2. 111 1 1
  3. 111 2 3
  4. 12 1 1
Спасибо

Решение задачи: «Как удалить дубли из БД?»

textual
Листинг программы
  1. DELETE a.* FROM Parse a ,
  2. (SELECT b.idGroup, b.idPost ,  MIN(b.status) AS STATUS  /* STATUS прописными буквами*/
  3. FROM Parse b
  4. GROUP BY idGroup, idPost
  5. ) c
  6. WHERE a.idGroup = c.idGroup
  7. AND a.idPost = c.idPost
  8. 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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут