Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.02.06;
Скачать: CL | DM;

Вниз

как найти дублирующиеся значения полей в таблице   Найти похожие ветки 

 
kyn66 ©   (2005-01-22 16:59) [0]

В огромной базе есть дубли по полю. Как их выбрать из базы, именно только дубли?


 
Danilka ©   (2005-01-22 17:11) [1]

Вообще-то, вопрос лучше в базы перенести.
Какая СУБД?
Один из возможных вариантов:
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 - первичный ключ.


 
Danilka ©   (2005-01-22 17:15) [2]

а вообще, неплохо-бы уточнить вопрос: необходимо выбрать все записи, у которых определеное поле имеют повторяющиеся значения, или необходим список значений определеного поля, которые встречаются более одного раза?
в [1] я привел первый вариант.


 
palva ©   (2005-01-22 17:52) [3]

[1] - очень медленно. Стандартный способ это получить записи с сортировкой по этому полю, последовательно их просматривать и отбирать нужное в другую таблицу. Если по полю нет индекса, то предварительно его построить.


 
kyn66 ©   (2005-01-22 18:36) [4]

необходим список значений определеного поля, которые встречаются более одного раза


 
Sergey_Masloff   (2005-01-22 18:52) [5]

palva ©   (22.01.05 17:52) [3]
Ага а просматривать табличку миллионов на семь очень быстро. Кстати могу поспорить что на 2-3 тысячах записей вы просматривая глазами дубль не найдете. По крайней мере с первых нескольких раз. А в 20-30 тысячах, скорее всего, не найдете никогда.


 
Anatoly Podgoretsky ©   (2005-01-22 19:08) [6]

Стандартный путь использовать групировки с Count и Having > 1


 
palva ©   (2005-01-22 22:41) [7]

Sergey_Masloff   (22.01.05 18:52) [5]
> Кстати могу поспорить что на 2-3 тысячах записей вы просматривая глазами дубль не найдете.

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

Но если задачу конкретизировали ([4]), то [6] - самое оно.


 
Johnmen ©   (2005-01-23 00:24) [8]

О чем вы, господа ?!!!!
Автор даже не привел тип БД ! О чем может быть разговор ?!


 
kyn66 ©   (2005-01-23 12:25) [9]

БД - DbaseIII пробывал прогонять исходную базу и с помощью Query отбирать дубликаты, но они(найденные дубликаты) дублируются, т.к. в отбор попадает как первый элемент дубликата, так и потом второй 8-(


 
palva ©   (2005-01-23 12:50) [10]

kyn66 ©   (23.01.05 12:25) [9]
Ну а дубликаты-то хоть рядом лежат? Сортировка срабатывает? Если да, то сделайте с записями то что вам нужно. Например, удалите устаревшие или ошибочные записи, либо сформируйте на их основе новую запись по известному вам алгоритму. Если то, что вы написали в [4], то занесите значение повторяющего поля в список.


 
kyn66 ©   (2005-01-23 14:31) [11]

Я же говорил, что перебирая записи исходной даблицы при помощи SELECT отбираю дубликаты.... Но ведь дубликат, если он есть, то имеет несколько одинаковых значений, а по сему SELECT отрабатывает на оди и тот-же дубль дважды. Я думаю как-то нужно делать селект в селекте или применять промежуточные базы, чего не хотелось-бы делать. Неужели нет какого-то стандартного решения в SQL-е?


 
SergP ©   (2005-01-23 20:36) [12]


>  [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


 
Danilka ©   (2005-01-23 21:40) [13]

[7] palva ©   (22.01.05 22:41)
Дл [4], конечно [6] - стандартное решение. Но когда нужны все поля, или любое кол-во полей, кроме поля с дублями, вариант который я привел в [1] будет самым быстрым, при условии что есть индекс по полям duble_field и id. Что, вобщем-то вполне логично, если подумать.



Страницы: 1 вся ветка

Текущий архив: 2005.02.06;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.031 c
1-1106580277
Jolik
2005-01-24 18:24
2005.02.06
Какой тип в Delphi соответствует float из VC++ 6.0?


6-1101110557
Yuve
2004-11-22 11:02
2005.02.06
Broadcast


8-1098686371
asds
2004-10-25 10:39
2005.02.06
Преобразование изображения


3-1104398535
aztech
2004-12-30 12:22
2005.02.06
Отключаю ADOTable входит ошибка EOF и BOF true?


1-1106642719
Aleksandr.
2005-01-25 11:45
2005.02.06
Как создать две разные настройки Делфи?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский