Гость
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Запрос на удаление дубликатов записей / 14 сообщений из 14, страница 1 из 1
28.02.2020, 15:21
    #39932221
Alex37
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос на удаление дубликатов записей
Привет!
Возникла проблема на ровном месте, не пойму, что не так. Помогите разобраться!

Есть таблица тДРклиентов:
Код (счетчик),
ФИО (текст)
День рождения (краткий формат даты),
ТелефонСотовый (текст)
ТелефонРабочий (текст)
ТелефонДомашний (текст)

В эту таблицу периодически добавляются записи из основной базы таким запросом:
Код: sql
1.
2.
3.
4.
INSERT INTO тДРклиентов ( ФИО, ТелефонСотовый, ТелефонДомашний, ТелефонРабочий, ДатаРождения )
SELECT DISTINCT Заказы.ФИО, Заказы.ТелефонСотовый, Заказы.ТелефонДомашний, Заказы.ТелефонРабочий, Заказы.[Дата рождения]
FROM Заказы
WHERE (((Заказы.[Дата рождения]) Is Not Null));


Естественно, появляются дубликаты записей. Создал запрос для их удаления из тДРклиентов:
Код: sql
1.
2.
3.
DELETE тДРклиентов.Код, тДРклиентов.ДатаРождения, тДРклиентов.ФИО
FROM тДРклиентов INNER JOIN тДРклиентов AS тДРклиентов_1 ON (тДРклиентов.ФИО = тДРклиентов_1.ФИО) AND (тДРклиентов.ДатаРождения = тДРклиентов_1.ДатаРождения)
WHERE (((тДРклиентов.Код)>[тДРклиентов_1].[Код]));


В режиме конструктора, если переключиться в режим таблицы, видны строки, которые будут удалены, но при запуске запроса появляется сообщение: "Необходимо указать таблицу, содержащую удаляемые записи". Вот в этом и засада!
Если установить тип запроса - выборка, то он работает. А если указать тип - для удаления, то работает частично. Что не так?
...
Рейтинг: 0 / 0
28.02.2020, 15:32
    #39932232
Serg197311
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос на удаление дубликатов записей
Сделать так, чтобы в табл Заказы записывались не ФИО,телефон сотовый и тд, а тДРклиентов.Код - тогда дубликатов не будет
...
Рейтинг: 0 / 0
28.02.2020, 15:41
    #39932245
Alex37
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос на удаление дубликатов записей
Serg197311,
Дело в том, что таблица Заказы периодически очищается от старых записей. Но выше указанные данные по клиентам решено было оставлять, в виде отдельной таблицы, которая буде накапливать эти данные.
...
Рейтинг: 0 / 0
28.02.2020, 16:11
    #39932268
Alex37
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос на удаление дубликатов записей
Попробовал более сложную конструкцию (использовал найденный в интернете метод):
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
DELETE тДРклиентов.Код, *
FROM тДРклиентов
WHERE (((тДРклиентов.Код) Not In 
(SELECT Min(тДРклиентов.Код) 
   From тДРклиентов 
   GROUP By тДРклиентов.ФИО,  тДРклиентов.ДатаРождения 
   HAVING Count(*) > 1) And (тДРклиентов.Код) Not In 
(SELECT Min(тДРклиентов.Код) 
   From тДРклиентов 
   GROUP By тДРклиентов.ФИО,  тДРклиентов.ДатаРождения 
   HAVING Count(*) = 1)));


Работает!
...
Рейтинг: 0 / 0
28.02.2020, 16:12
    #39932269
Запрос на удаление дубликатов записей
Alex37, может нужно не удалять дубликаты, а не допускать их добавления?
Например - создать уникальный составной ключ по "ФИО" и "День рождения" (конечно, если день рождения всегда указан).
Тогда ваш запрос INSERT INTO сам отбросит все дубликаты.
...
Рейтинг: 0 / 0
28.02.2020, 16:13
    #39932270
Alex37
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос на удаление дубликатов записей
Да, не указал сразу, использую Офис 2003 SP3
...
Рейтинг: 0 / 0
28.02.2020, 16:15
    #39932272
Alex37
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос на удаление дубликатов записей
Кривцов Анатолий,
К сожалению день рождения не всегда указан...
...
Рейтинг: 0 / 0
28.02.2020, 16:26
    #39932284
Запрос на удаление дубликатов записей
Alex37
К сожалению день рождения не всегда указан...
Ну тогда Иванов И.И. с указанным Д/Р и он же без Д/Р - не дубликаты. Вы их и своим запросом не выловите.
...
Рейтинг: 0 / 0
28.02.2020, 16:41
    #39932292
Alex37
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос на удаление дубликатов записей
Кривцов Анатолий
Alex37
К сожалению день рождения не всегда указан...
Ну тогда Иванов И.И. с указанным Д/Р и он же без Д/Р - не дубликаты. Вы их и своим запросом не выловите.

Проверил. Да, действительно, без ДР запись не удаляется. Но в эту таблицу ФИО добавляется лишь при наличии ДР. Так что с этой стороны нападения не жду. :)
...
Рейтинг: 0 / 0
28.02.2020, 19:32
    #39932375
sdku
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос на удаление дубликатов записей
Alex37
Serg197311,
Дело в том, что таблица Заказы периодически очищается от старых записей. Но выше указанные данные по клиентам решено было оставлять, в виде отдельной таблицы, которая буде накапливать эти данные.
А так и должно быть:2 таблицы-[клиенты] и [заказы] со связью 1:М.И ничего удалять не надо, дабы не лишиться истории. Фсё...
...
Рейтинг: 0 / 0
28.02.2020, 20:19
    #39932398
sdku
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос на удаление дубликатов записей
По основополагающим принципам базостроения таблица должна описывать только одну сущность: [клиенты] клиентов,[заказы] заказы.А не как у Вас тбл.тДРклиентов: Описываются и заказы и клиенты
(из попытки создать такую таблицу ничего путного не выйдет, т.к. это тривиальный запрос на выборку из ДВУХ таблиц [заказы]и[клиенты])
...
Рейтинг: 0 / 0
28.02.2020, 20:37
    #39932405
Alex37
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос на удаление дубликатов записей
Это я все понимаю и знаю. Но данная программа - это не классическая база. А просто журнал. Использовал страничку, прошло некоторое время, страничку удалили. Там ведутся служебные записи в основном. Но со временем захотелось кое что оставлять. В данном случае некоторую инфу по клиентам.
...
Рейтинг: 0 / 0
28.02.2020, 20:40
    #39932407
Alex37
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос на удаление дубликатов записей
Этот журнал ведется с начала 2000-х годов. Всех устраивает. Но дополнительные хотелки периодически появляются :) Время ведь не стоит на месте.
...
Рейтинг: 0 / 0
28.02.2020, 20:41
    #39932408
Alex37
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос на удаление дубликатов записей
Вопрос решил. Всем спасибо!
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Запрос на удаление дубликатов записей / 14 сообщений из 14, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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