![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
как найти дублирующиеся значения полей в таблице [D6]
kyn66 © (2005-01-22 16:59:00)В огромной базе есть дубли по полю. Как их выбрать из базы, именно только дубли?
Danilka (2005-01-23 21:40:00) [1][7] palva © (22.01.05 22:41)
Дл [4], конечно [6] - стандартное решение. Но когда нужны все поля, или любое кол-во полей, кроме поля с дублями, вариант который я привел в [1] будет самым быстрым, при условии что есть индекс по полям duble_field и id. Что, вобщем-то вполне логично, если подумать.
SergP (2005-01-23 20:36:00) [2]
> [11] kyn66 © (23.01.05 14:31)
> Я же говорил, что перебирая записи исходной даблицы при
> помощи SELECT отбираю дубликаты.... Но ведь дубликат, если
> он есть, то имеет несколько одинаковых значений, а по сему
> SELECT отрабатывает на оди и тот-же дубль дважды. Я думаю
> как-то нужно делать селект в селекте или применять промежуточные
> базы, чего не хотелось-бы делать. Неужели нет какого-то
> стандартного решения в SQL-е?
Ну ведь уже было сказано в:
> [6] Anatoly Podgoretsky © (22.01.05 19:08)
> Стандартный путь использовать групировки с Count и Having
> > 1
т.е., например:
Получить значения дублирующихся полей:
select field from table group by field having count(*)>1
Получить дублирующиеся записи:
select * from table where field in (select field from table group by field having count(*)>1)
Можно попробовать так: чтобы получить по одной из каждой группы дублирующихся записей, но такое может не везде работать:
select * from table group by field having count(*)>1
kyn66 (2005-01-23 14:31:00) [3]Я же говорил, что перебирая записи исходной даблицы при помощи SELECT отбираю дубликаты.... Но ведь дубликат, если он есть, то имеет несколько одинаковых значений, а по сему SELECT отрабатывает на оди и тот-же дубль дважды. Я думаю как-то нужно делать селект в селекте или применять промежуточные базы, чего не хотелось-бы делать. Неужели нет какого-то стандартного решения в SQL-е?
palva (2005-01-23 12:50:00) [4]kyn66 © (23.01.05 12:25) [9]
Ну а дубликаты-то хоть рядом лежат? Сортировка срабатывает? Если да, то сделайте с записями то что вам нужно. Например, удалите устаревшие или ошибочные записи, либо сформируйте на их основе новую запись по известному вам алгоритму. Если то, что вы написали в [4], то занесите значение повторяющего поля в список.
kyn66 (2005-01-23 12:25:00) [5]БД - DbaseIII пробывал прогонять исходную базу и с помощью Query отбирать дубликаты, но они(найденные дубликаты) дублируются, т.к. в отбор попадает как первый элемент дубликата, так и потом второй 8-(
Johnmen (2005-01-23 00:24:00) [6]О чем вы, господа ?!!!!
Автор даже не привел тип БД ! О чем может быть разговор ?!
palva (2005-01-22 22:41:00) [7]Sergey_Masloff (22.01.05 18:52) [5]
> Кстати могу поспорить что на 2-3 тысячах записей вы просматривая глазами дубль не найдете.
И спорить не буду, и просматривать не возьмусь. Просматривать - это программно, конечно. Просматривая рекордсет можно делать нужную обработку, удалять, например, или еще что...
Но если задачу конкретизировали ([4]), то [6] - самое оно.
Anatoly Podgoretsky (2005-01-22 19:08:00) [8]Стандартный путь использовать групировки с Count и Having > 1
Sergey_Masloff (2005-01-22 18:52:00) [9]palva © (22.01.05 17:52) [3]
Ага а просматривать табличку миллионов на семь очень быстро. Кстати могу поспорить что на 2-3 тысячах записей вы просматривая глазами дубль не найдете. По крайней мере с первых нескольких раз. А в 20-30 тысячах, скорее всего, не найдете никогда.
kyn66 (2005-01-22 18:36:00) [10]необходим список значений определеного поля, которые встречаются более одного раза
palva (2005-01-22 17:52:00) [11][1] - очень медленно. Стандартный способ это получить записи с сортировкой по этому полю, последовательно их просматривать и отбирать нужное в другую таблицу. Если по полю нет индекса, то предварительно его построить.
Danilka (2005-01-22 17:15:00) [12]а вообще, неплохо-бы уточнить вопрос: необходимо выбрать все записи, у которых определеное поле имеют повторяющиеся значения, или необходим список значений определеного поля, которые встречаются более одного раза?
в [1] я привел первый вариант.
Danilka (2005-01-22 17:11:00) [13]Вообще-то, вопрос лучше в базы перенести.
Какая СУБД?
Один из возможных вариантов:
SELECT * FROM my_table m
WHERE EXISTS (SELECT 1 FROM my_table t WHERE t.duble_field = m.duble_field AND t.id != m.id)
где duble_field - дублирующее поле, id - первичный ключ.