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

backoff

Client
Регистрация
20.04.2015
Сообщения
5 926
Благодарностей
6 389
Баллы
113
привет.
есть таблица, в ней есть столбец links (ссылки на внутренние страницы сайта), много строк, хочу удалять дубли, если попадаются, каким запросом это лучше всего сделать?
спасибо
 

top.razrab

Client
Регистрация
05.09.2017
Сообщения
61
Благодарностей
16
Баллы
8
привет.
есть таблица, в ней есть столбец links (ссылки на внутренние страницы сайта), много строк, хочу удалять дубли, если попадаются, каким запросом это лучше всего сделать?
спасибо
 
  • Спасибо
Реакции: backoff

backoff

Client
Регистрация
20.04.2015
Сообщения
5 926
Благодарностей
6 389
Баллы
113
я так понимаю нужен этот запрос
SQL:
DELETE
    `table`
FROM 
    `table`
LEFT OUTER JOIN
    (SELECT MIN(`id`) AS `id`, `col1` FROM `table` GROUP BY `col1`) AS `tmp`
ON
    `table`.`id` = `tmp`.`id` 
WHERE
    `tmp`.`id` IS NULL
но не понимаю что куда пихать, чтоб не запороть)
правильно ли?
table - это название таблицы
col1 - это нужный столбец
а вот что такое id - наверно индекс
и что такое tmp - наверно временные строки?

как составить запрос, если
моя таблица называется - mytable555
столбец - page

верно?
SQL:
DELETE
    `mytable555`
FROM 
    `mytable555`
LEFT OUTER JOIN
    (SELECT MIN(`id`) AS `id`, `page` FROM `mytable555` GROUP BY `page`) AS `tmp`
ON
    `mytable555`.`id` = `tmp`.`id` 
WHERE
    `tmp`.`id` IS NULL
 

top.razrab

Client
Регистрация
05.09.2017
Сообщения
61
Благодарностей
16
Баллы
8
Да, все верно. Рекомендую делать резервные копии БД перед такими операциями, а то мало ли.
 

backoff

Client
Регистрация
20.04.2015
Сообщения
5 926
Благодарностей
6 389
Баллы
113
запрос завис на 12й минуте, и чето ничего не удалил, я посмотрел запросов другим (select), посмотреть сколько дублей, запрос занял 4 минуты и показал 330к дублей из 5.2кк срок.
сделал дамп и руками вытащил все строки, через - EmEditor решил удалить дубли, удалилось дублей 4.5кк )))))
база из 800мб, стала 80
как-то так)
 

top.razrab

Client
Регистрация
05.09.2017
Сообщения
61
Благодарностей
16
Баллы
8
запрос завис на 12й минуте, и чето ничего не удалил, я посмотрел запросов другим (select), посмотреть сколько дублей, запрос занял 4 минуты и показал 330к дублей из 5.2кк срок.
сделал дамп и руками вытащил все строки, через - EmEditor решил удалить дубли, удалилось дублей 4.5кк )))))
база из 800мб, стала 80
как-то так)
Я чистил базу на 11кк строк через HeidiSQL примерно минут 40, около 4кк дублей
 

WalkODoff

Client
Регистрация
09.04.2016
Сообщения
149
Благодарностей
31
Баллы
28
DELETE FROM mytable555
WHERE page IN (
SELECT page
FROM mytable555
GROUP BY page
HAVING COUNT(*) > 1
);
 

WalkODoff

Client
Регистрация
09.04.2016
Сообщения
149
Благодарностей
31
Баллы
28
а вообще в самой БД настрой столбец что бы если уже есть такое значение то больше не записывалось.

PHP:
ALTER TABLE mytable555
ADD CONSTRAINT unique_page UNIQUE (page);
119666
 
Последнее редактирование:
  • Спасибо
Реакции: kagorec и backoff

backoff

Client
Регистрация
20.04.2015
Сообщения
5 926
Благодарностей
6 389
Баллы
113

backoff

Client
Регистрация
20.04.2015
Сообщения
5 926
Благодарностей
6 389
Баллы
113
чето не догоняю, настройки

119728

119729

все равно сохраняет одинаковый - page
что не так делаю?
 

backoff

Client
Регистрация
20.04.2015
Сообщения
5 926
Благодарностей
6 389
Баллы
113
поставил индекс уникальный, заработало.

119731

ps \ мало ли кому пригодиться
 

backoff

Client
Регистрация
20.04.2015
Сообщения
5 926
Благодарностей
6 389
Баллы
113
теперь прикол в том что нельзя добавлять списком, если в списке есть дубль, то ничего не добавляется, можно ли как-то обойти это? а то добавлять по 1й строке - не варик (
 

doc

Client
Регистрация
30.03.2012
Сообщения
8 607
Благодарностей
4 598
Баллы
113
теперь прикол в том что нельзя добавлять списком, если в списке есть дубль, то ничего не добавляется, можно ли как-то обойти это? а то добавлять по 1й строке - не варик (
используй INSERT IGNORE
 
  • Спасибо
Реакции: backoff

backoff

Client
Регистрация
20.04.2015
Сообщения
5 926
Благодарностей
6 389
Баллы
113

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)