|
|
|
| Здравствуйте,
Есть база данных. В главном столбце некоторые (довольно много) значения дублируются. Как можно их удалить, то есть чтобы было только по одному значению.
На ум приходит только перебор с php:
Берётся первое значение
Ищется есть ли в базе такое же
Если есть, оно удаляется
Берётся следующее значение
Возможно ли это сделать средствами MySQL? | |
|
|
|
|
|
|
|
для: Qiao
(05.09.2007 в 06:54)
| |
select t1.id, t1.compare_column from tbl1, tbl as t2 where t1.compare_column = t2.compare_column and t1.id <> t2.id
|
Выведутся повторы. По ним и надо пройтись | |
|
|
|
|
|
|
|
для: Artem S.
(05.09.2007 в 08:42)
| | Интересно получилось, спасибо.
Только там как я понял опечатка - from tbl as t1, tbl as t2. То есть из одной таблицы два раза берётся и само с собой сравнивается. | |
|
|
|
|
|
|
|
для: Artem S.
(05.09.2007 в 08:42)
| |
SELECT min(t1.id), t1.compare_column
FROM t1
GROUP BY t1.compare_column
|
А так можно получить таблицу неповторяющихся значений с айди первого встретевшегося значения.
Ну это если задача конечно на столько проста... так что надо смотреть на структуру вашей таблицы, и знать что делать с повторениями, просто снести... или возможно обработать :) | |
|
|
|
|
|
|
|
для: evilive
(05.09.2007 в 14:10)
| | Поиск дубликатов с помощью самосоединения - это не есть гуд, когда таблица содержит огромное количество данных. | |
|
|
|
|
|
|
|
для: oradev
(05.09.2007 в 14:16)
| | Воспользуйтесь следующим запросом:
SELECT compare_column, COUNT (1) AS c_num
FROM tbl
GROUP BY compare_column
HAVING COUNT (1) >= 2
ORDER BY c_num DESC;
|
| |
|
|
|
|
|
|
|
для: oradev
(05.09.2007 в 14:41)
| | Как таблицу построить разобрался, а вот как обрабатывать эту таблицу?
Нужно выбирать из значений максимальное по длине и удалять все остальные.
Подсакажите, пожалуйста, как реализовать, а то я не соображу даже как подступиться. | |
|
|
|