Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Как удалить повторяющиеся значения
 
 автор: Qiao   (05.09.2007 в 06:54)   письмо автору
 
 

Здравствуйте,

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

На ум приходит только перебор с php:
Берётся первое значение
Ищется есть ли в базе такое же
Если есть, оно удаляется
Берётся следующее значение

Возможно ли это сделать средствами MySQL?

   
 
 автор: Artem S.   (05.09.2007 в 08:42)   письмо автору
 
   для: 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

Выведутся повторы. По ним и надо пройтись

   
 
 автор: Qiao   (05.09.2007 в 10:45)   письмо автору
 
   для: Artem S.   (05.09.2007 в 08:42)
 

Интересно получилось, спасибо.

Только там как я понял опечатка - from tbl as t1, tbl as t2. То есть из одной таблицы два раза берётся и само с собой сравнивается.

   
 
 автор: evilive   (05.09.2007 в 14:10)   письмо автору
 
   для: Artem S.   (05.09.2007 в 08:42)
 


SELECT min(t1.id), t1.compare_column
FROM t1
GROUP BY t1.compare_column

А так можно получить таблицу неповторяющихся значений с айди первого встретевшегося значения.

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

   
 
 автор: oradev   (05.09.2007 в 14:16)   письмо автору
 
   для: evilive   (05.09.2007 в 14:10)
 

Поиск дубликатов с помощью самосоединения - это не есть гуд, когда таблица содержит огромное количество данных.

   
 
 автор: oradev   (05.09.2007 в 14:41)   письмо автору
 
   для: 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;

   
 
 автор: Qiao   (26.10.2007 в 09:14)   письмо автору
 
   для: oradev   (05.09.2007 в 14:41)
 

Как таблицу построить разобрался, а вот как обрабатывать эту таблицу?

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

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования