Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Как оптимально написать запрос (построить алгоритм) на удаление дублей? / 7 сообщений из 7, страница 1 из 1
31.05.2004, 11:58
    #32540748
Как оптимально написать запрос (построить алгоритм) на удаление дублей?
Возможно, это задача типичная для приложений баз данных.

Дано:
В таблице Table1 есть 4 поля (наряду с прочими): Phone1, Model, [Year], PubDate.

Надо:
Удалить все записи с одинаковыми значениями первых трех полей, но чтобы запись с самым последним PubDate осталась.
Если все PubDate одинаковы, то без разницы, какие удалять, но одна запись, чтобы осталась по любому.

Вопрос: можно ли это реализовать как-нибудь одним (двумя) запросами.
Или все же писать алгоритм (на VB), создавать рекодсет, прокручивать, удаляя? И как в этом случае правильно построить алгоритм?

Может кто-то уже работал над подобной задачей?

Заранее спасибо.
Иван Абрамов.
...
Рейтинг: 0 / 0
31.05.2004, 12:09
    #32540773
paparome
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как оптимально написать запрос (построить алгоритм) на удаление дублей?
О недавно подсмотрел

Код: plaintext
1.
2.
3.
delete t1.*
from tbl t1 inner join tbl t2
on (t1.phone = t2.phone) and (t1.model = t2.model)
and (t1.year = t2.year) and (t1.PubDate < t2.PubDate)
?
...
Рейтинг: 0 / 0
31.05.2004, 12:16
    #32540781
Blunder
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как оптимально написать запрос (построить алгоритм) на удаление дублей?
http://www.ibase.ru/devinfo/deldupes.htm

здесь несколько вариантов описано
...
Рейтинг: 0 / 0
31.05.2004, 12:39
    #32540818
Как оптимально написать запрос (построить алгоритм) на удаление дублей?
Спасибо, paparome,

но я вижу, что твой запрос удалит только те, где t1.PubDate < t2.PubDate.
А как быть в случае, когда и PubDate одинаковые, и надо оставить одну (любую) запись?

Blunder, тоже спасибо.
...
Рейтинг: 0 / 0
31.05.2004, 12:50
    #32540831
Как оптимально написать запрос (построить алгоритм) на удаление дублей?
Подкорректировал немного запрос

delete t1.*
from tblAd t1
inner join tblAd t2 on t1.phone1 = t2.phone1
and t1.model = t2.model
and t1.year = t2.year
and (t1.PubDate < t2.PubDate or (t1.PubDate = t2.PubDate and t1.ID < t2.ID))

Так наверно будет то, что надо.
...
Рейтинг: 0 / 0
31.05.2004, 12:59
    #32540843
Galustov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как оптимально написать запрос (построить алгоритм) на удаление дублей?
Хороший вариант у Ивана Обрамова, только объясните ID - это что?
...
Рейтинг: 0 / 0
31.05.2004, 13:06
    #32540851
Как оптимально написать запрос (построить алгоритм) на удаление дублей?
ID - это уникальное поле, присутствующее в таблице. (В условии задачи отсутствовало.)
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Как оптимально написать запрос (построить алгоритм) на удаление дублей? / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]