SQLinfo.ru - Все о MySQL Webew.ru: теория и практика веб-технологий

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 28.05.2020 00:04:13

Morissa
Участник
Зарегистрирован: 27.05.2020
Сообщений: 3

Удалить повторяющиеся строки из таблицы MySQL

Всем привет!
Не приходилось работать с базой данных, но тут база данных явно "засорилась" из-за ошибок плагинов Wordpressa.
Если коротко, то есть таблица, в ней 4 столбца и много идентичных строк (ненужных), выглядит примерно так

[meta_id] [post_id] [meta_key] [meta_value]
[1111111] [9999999] [_wpbcode] [css……]
[2222222] [9999999] [_wpbcode] [css……]
[3333333] [9999999] [_wpbcode] [css……]
[4444444] [9999999] [_wpbcode] [css……]

[5555555] [3333333] [_wpbcode] [zzz……]
[6666666] [3333333] [_wpbcode] [zzz……]
[7777777] [3333333] [_wpbcode] [zzz……]
[8888888] [3333333] [_wpbcode] [zzz……]

Т.е. мне нужно из таблицы выбрать ВСЕ строки, у которых совпадают поля [post_id], [meta_key] и [meta_value] и удалить все эти строки, кроме одной (не важно какая это будет строка, с каким meta_id, ибо строки идентичны).
Вся таблица забита повторяющими строками,  т.е. их очень много и вручную 60 тыс строк перелопачивать не хочется.

Подскажите какой запрос написать в phpMyadmin чтобы за раз поудалять эти дублированные строки?

Спасибо заранее, Морисса.

Неактивен

 

#2 28.05.2020 00:18:05

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: Удалить повторяющиеся строки из таблицы MySQL


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#3 28.05.2020 00:44:39

Morissa
Участник
Зарегистрирован: 27.05.2020
Сообщений: 3

Re: Удалить повторяющиеся строки из таблицы MySQL

Ух ты, в этом посту очень похожая ситуация. Спасибо за подсказку.
Для моего случая вот так вроде бы.... Т.е. нужно чтоб совпадали все три столбца из четырех существующих. meta_id в моем случае это primary, уникальный столбец.

CREATE TABLE wp_postmeta_new SELECT max(meta_id) meta_id from wp_postmeta GROUP BY post_id, meta_key, meta_value;
DELETE from wp_postmeta WHERE meta_id NOT IN (select meta_id from wp_postmeta_new);

На компьютере базы нет, а на рабочей сразу применять придется, поэтому лучше переспросить...

Неактивен

 

#4 28.05.2020 00:50:34

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: Удалить повторяющиеся строки из таблицы MySQL

Лучше, конечно, тренироваться на кошках.
Создайте копию таблицы

CREATE TABLE new_table LIKE original_table;
INSERT INTO new_table SELECT * FROM original_table;

и далее отладьте на таблице new_table сперва, а когда убедитесь в правильности - делайте на бою.


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#5 28.05.2020 02:06:51

Morissa
Участник
Зарегистрирован: 27.05.2020
Сообщений: 3

Re: Удалить повторяющиеся строки из таблицы MySQL

Благодарю за помощь, всё получилось!

Неактивен

 

#6 28.05.2020 10:27:39

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Удалить повторяющиеся строки из таблицы MySQL

Дополню, задачу можно решить в один запрос:

https://sqlinfo.ru/articles/info/19.html

удалить из таблицы дубликаты (строки с одинаковыми значениями поля col) с меньшим id
DELETE t1 FROM t t1 JOIN t t2 ON t1.col = t2.col AND t1.id < t2.id;
через подзапрос
DELETE t FROM t LEFT JOIN (SELECT max(id) as id, col FROM t GROUP BY col) t1 USING(id) WHERE t1.id IS NULL;

Неактивен

 

#7 07.06.2020 18:19:26

poolday
Участник
Зарегистрирован: 07.06.2020
Сообщений: 1

Re: Удалить повторяющиеся строки из таблицы MySQL

а чистить не пробовали? Даже на хосте в разделе Спанели подобное имеется и можно палить такие ошибки..

Отредактированно poolday (06.08.2020 03:05:57)

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson