Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > SQL, базы данных
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.06.2009, 12:57   #1
Лубышев
Участник клуба
 
Аватар для Лубышев
 
Регистрация: 23.07.2007
Сообщений: 1,054
Вопрос Убрать дуплетность

Такая проблема:
Существует большая база данных (Библиотечный книжный фонд: база для MarcSQL - если кто то знаком с этим). База Microsoft Access (mbd).
В одном из полей хранится информация о книгах (поле Items в таблице Doc). Но бывало такое что книжки по два раза вносили.
Нужно как то убрать дублетность(повторы) этих записей.
Писано по д'Эльфийски

Последний раз редактировалось Лубышев; 10.06.2009 в 13:03.
Лубышев вне форума Ответить с цитированием
Старый 10.06.2009, 13:23   #2
soleil@mmc
SQL-коддинг
Участник клуба
 
Регистрация: 16.01.2009
Сообщений: 1,192
По умолчанию

если вам доступна ROW_NUMBER(), то существует простое решение

проверить можно хотя бы таким запросом (подставьте реальные названия полей, фильтр введен исключительно для уменьшения объема выборки)
Код:
select 
  book_id,
  row_number() over(order by book_id) rn
from books
where 0=0
  and book_id > 1000000
soleil@mmc вне форума Ответить с цитированием
Старый 10.06.2009, 13:29   #3
Лубышев
Участник клуба
 
Аватар для Лубышев
 
Регистрация: 23.07.2007
Сообщений: 1,054
По умолчанию

что то не то!
Блин я уже где то видел запрос, который бы удалял повторные записи!
Писано по д'Эльфийски
Лубышев вне форума Ответить с цитированием
Старый 10.06.2009, 13:36   #4
soleil@mmc
SQL-коддинг
Участник клуба
 
Регистрация: 16.01.2009
Сообщений: 1,192
По умолчанию

чего не то?
я спросил - работает запрос такого типа
если да, то приведу простое решение
soleil@mmc вне форума Ответить с цитированием
Старый 10.06.2009, 13:40   #5
Лубышев
Участник клуба
 
Аватар для Лубышев
 
Регистрация: 23.07.2007
Сообщений: 1,054
По умолчанию

не работает кажется такой функции вообще нет
Писано по д'Эльфийски
Лубышев вне форума Ответить с цитированием
Старый 10.06.2009, 14:00   #6
soleil@mmc
SQL-коддинг
Участник клуба
 
Регистрация: 16.01.2009
Сообщений: 1,192
По умолчанию

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

2) через доп.таблицу
найти все дублирующие записи и с дистинктом их перелить в новую таблицу, удалить все дубли в старой и залить из новой в старую все записи, которые уже по определению не являются дублями
soleil@mmc вне форума Ответить с цитированием
Старый 16.06.2009, 10:27   #7
Лубышев
Участник клуба
 
Аватар для Лубышев
 
Регистрация: 23.07.2007
Сообщений: 1,054
По умолчанию

написали запрос, который удаляет повторения сравнивая по одному полю и оставляет первую найденную запись, а остальные записи долой.
Код:
delete from doc where doc_id not in (select min(doc_id)  from doc group by item)
но вот не задача то выходит
запрос хорошо работает на маленьком количестве записей. А вот когда их 50000 то тут проблема. Комп задумывается и не известно когда выполнится такой запрос. как бы это все оптимизировать?
Писано по д'Эльфийски
Лубышев вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Убрать повторы ShnapS БД в Delphi 4 15.05.2009 23:03
убрать пробелы zetrix Microsoft Office Excel 9 10.03.2009 10:03
Убрать HTML JRcoker JavaScript, Ajax 10 29.09.2008 20:21
убрать рекламу. алена (елена) Софт 4 21.09.2008 12:11
Убрать из uses Маркъ Общие вопросы Delphi 3 03.02.2007 11:44