|
|
|
| Здравствуте.
Подскажите как удалить из таблицы одинаковые записи.
Может есть встроенная функция?
Извиняюсь за такой вопрос, но совершенно нет времени искать в справочниках.
И еще, у меня автоинкрементное поле ID так вот после удаления записей остаются дыры в индексах(может мне показалось?) можно это как-то поправить, сдвинуть чтобы дыр не было.
Заранее благодарен. | |
|
|
|
|
|
|
|
для: Snorri
(09.06.2006 в 14:35)
| | удалить автоинкрементный столбец и создать его заново. Только зачем это? | |
|
|
|
|
|
|
|
для: Loki
(09.06.2006 в 14:45)
| | А как удалить одинаковые записи?
Точнее, чтобы из набора одинаковых записей осталась только одна? | |
|
|
|
|
|
|
|
для: Snorri
(09.06.2006 в 15:11)
| | Создать новую таблицу при помощи запроса
CREATE TABLE new_tbl SELECT * FROM tbl GROUP BY field
|
Где field - поле, которое должно стать уникальным. После этого необходимо удалить таблицу tbl
А новую таблицу переименовать в tbl
ALTER TABLE new_tbl RENAME TO tbl
|
| |
|
|
|
|
|
|
|
для: cheops
(09.06.2006 в 16:54)
| | а можно поподробне, что при этом произойдет? какие записи удалятся, какие останутся?
допустим, есть запись с id=187 и каким-то именем в поле name и есть с id=3877 и таким же
именем. какая запись останется? с меньшим id? а если мне, например, нужно в каких-то
случаях сохранить более позднюю запись? или MySQL будет при каждом совпадении останавливаться? | |
|
|
|
|
|
|
|
для: elenaki
(09.06.2006 в 16:58)
| | Останется случайная запись (заранее с вами соглашусь - действительно не удобно :))) | |
|
|
|
|
|
|
|
для: cheops
(09.06.2006 в 17:01)
| | A EC/\u TAK:
1. взяли строку/поле из старой таблицы
2. записали во временную таблицу
3. взяли следующую строку/поле из старой таблицы
4. сравнили со строками/полями во временной таблице
5. если не найдено совпадений, переходим на п.2
6. если найдено совпадение, переходим на п.3
вот только боюсь, долго это будет. записей - около 90 тыс.
нет. все равно нелься скрипту самому решать, что удалять, что оставлять. помнится, я делала это
на CFM... выводила всех двойников на экран и в конце каждой строки - чекбокс. пробегаешь глазами
содержимое нужных полей, отмечаешь, что не нужно, жмешь "удалить" и удаляются все строки с
отмеченными чекбоксами. строки, которые остались в таблице, больше не показываются, потому
что они теперь в единственном экземпляре. | |
|
|
|
|
|
|
|
для: cheops
(09.06.2006 в 17:01)
| | между прочим, на большинстве db-платформ, отличных от MySQL, конструкция Group by, порождающая неопределенку (т.е. не снабженная соответствующими агрегатными функциями в разделе select ) просто запрещена.
Даже DISTINCT, который все клянут за неоптимальность, всяко предпочтительней. | |
|
|
|