Форум программистов, компьютерный форум, киберфорум
MySQL
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.69/67: Рейтинг темы: голосов - 67, средняя оценка - 4.69
0 / 0 / 0
Регистрация: 09.08.2010
Сообщений: 10
1

Удаление повторяющихся записей

05.01.2011, 12:35. Показов 13404. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
У меня есть табличка :
CREATE TABLE `SALES` (
`ID` int(11) NOT NULL auto_increment,
`PHONE` char(10) default NULL,
`VIN` char(20) default NULL,
`GOD` char(10) default NULL,
`FIO` char(110) default NULL,
`ADRESS` text,
`FDOC` char(50) default NULL,
`OPR` varchar(100) default NULL,
`DATEO` char(10) default NULL,
PRIMARY KEY (`ID`),
KEY `vin_ind` (`VIN`),
KEY `phone_ind` (`PHONE`),
FULLTEXT KEY `FIO` (`FIO`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=10832764 ;

Мне необходимо удалить запсиси(дубликаты) имеющие одинаковые значения по 3-м полям: PHONE, VIN, FIO.
Для чего я выполняю запрос: ALTER IGNORE TABLE SALES ADD UNIQUE INDEX(PHONE, VIN, FIO);
Появляется уникальный индекс по 3-м полям, но строки не удаляются.
Помогите понять, что не так я делаю или может быть есть какой нибудь другой способ? база огромная весит 5gb все это мне нужно что б уменьшить её размер.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.01.2011, 12:35
Ответы с готовыми решениями:

Удаление повторяющихся записей
Здравствуйте! есть запрос, который выбирает повторяющиеся записи SELECT * FROM `test` GROUP...

Удаление повторяющихся записей
Понимаю, что вопрос заезженный, но меня в первую очередь интересует "почему так получилось?", а...

Удаление повторяющихся записей по условию
Есть табличка, 11 полей: возраст, пол, Имя, Фамилия.... Порядка 30000 записей. Необходимо удалить...

Поиск повторяющихся записей в БД
Допустим, есть таблица. | id | fruit | kg | ------------------ | 1 | apple | 6 | | 2 |...

6
134 / 119 / 0
Регистрация: 30.06.2010
Сообщений: 221
05.01.2011, 13:57 2
Записи удаляются командой DELETE.

Например у Вас в таблице есть три одинаковые записи(по Вашему критерию) удалять надо все три или только две? Если только две, то по какому критерию определять кого амнистировать, а кого казнить?
0
0 / 0 / 0
Регистрация: 09.08.2010
Сообщений: 10
05.01.2011, 15:04  [ТС] 3
нужно оставить любую запись из трех. Без разницы какую.
0
134 / 119 / 0
Регистрация: 30.06.2010
Сообщений: 221
05.01.2011, 16:12 4
Попробуйте так. Не претендую на оптимальность, но должно работать. Оставляем запись с минимальным ID.

SQL
1
2
3
4
5
6
7
8
9
10
DELETE ss
FROM sales ss
  INNER JOIN (SELECT s.id
              FROM sales s
                INNER JOIN (SELECT phone,vin,fio,COUNT(*) AS nn, MIN(id) AS id
                            FROM sales
                            GROUP BY phone,vin,fio
                            HAVING COUNT(*)>1) s1
                  ON s.id<>s1.id AND s.phone=s1.phone AND s.vin=s1.vin AND s.fio=s1.fio) sd
    ON ss.id=sd.id;
2
0 / 0 / 0
Регистрация: 09.08.2010
Сообщений: 10
06.01.2011, 07:42  [ТС] 5
Скрипт очень интересный спасибо. Только вот выдает ошибку:
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'count(*) AS nn, min(ID) AS ID FROM SALES' at line 5
Версия сервера: 5.0.91-log

Добавлено через 13 минут
Не нравятся слова count и min посоветуете что нибудь?
0
134 / 119 / 0
Регистрация: 30.06.2010
Сообщений: 221
06.01.2011, 16:17 6
День добрый.

У меня, к сожалению, нет в наличии MySQL v.5.0.91. Поэтому я проверил на версиях 4.1.22, 5.0.87 и 5.1.40 - все работает, никакой ошибки в синтаксисе нет. Может у Вас какие-то специфические настройки сервера?

Добавлено через 2 часа 28 минут
Либо попробуйте так:

SQL
1
2
3
4
DELETE s1
  FROM sales s1
  JOIN (SELECT MIN(id) id, phone, vin, fio FROM sales GROUP BY phone, vin, fio) s2
    ON s1.id <> s2.id AND s1.phone = s2.phone AND s1.vin = s2.vin AND s1.fio = s2.fio
0
0 / 0 / 0
Регистрация: 09.08.2010
Сообщений: 10
07.01.2011, 00:14  [ТС] 7
Все получилось... огромное спасибо
0
07.01.2011, 00:14
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.01.2011, 00:14
Помогаю со студенческими работами здесь

Как ограничить количество повторяющихся записей в таблице?
Есть таблица в бд, у которой есть столбец class, который может повторяться. Как можно поставить...

Удаление повторяющихся строк
Доброго времени суток, пытаюсь удалить повторяющиеся строки по ID вот так: DELETE from `houses`...

Удаление повторяющихся данных из таблицы
Доброго времени суток! Есть две таблицы students(surname, name, age, weight, height), и...

Исключение повторяющихся записей в выборке
Все привет народ, есть вот такой запрос SELECT...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru