Форум программистов, компьютерный форум, киберфорум
Microsoft Access
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.61/18: Рейтинг темы: голосов - 18, средняя оценка - 4.61
 Аватар для POJIBOX
2 / 2 / 0
Регистрация: 03.06.2018
Сообщений: 163

Не работает DELETE для "повторяющихся" строк

19.02.2024, 20:51. Показов 5355. Ответов 134

Студворк — интернет-сервис помощи студентам
Здравствуйте, добрые люди!
Долго колупался с ускорением заполнения базы и доколупался до хорошей для меня скорости наполнения, однако без граблей не обошлось, когда я опустил проверки на точность параметров при замене данных получил дублирование для одного набора ключей записей с разной точностью. Исходная тема (Импорт данных из файла в БД) короткая, да и проблема видна когда пытаюсь отладить макрос в самой БД.
Как видно из запроса есть 5 ключевых параметров и пара значимых полей в записи - это значение и его точность.

Чтобы было понятно, чем больше число тем ниже точность.

Итак нашел я замечательный пример и попробовал состряпать свой запрос на удаление повторяющейся записи с меньшей точностью. Для начала изобразил выборку, абы проверить правильно ли выбирает, оставил в последствии только те записи, что подлежат удалению:

SQL
1
2
3
SELECT a.* FROM Weather a,
(SELECT * FROM Weather) b
WHERE a.ID_MD = b.ID_MD AND a.DT = b.DT AND a.LAT = b.LAT AND a.LON = b.LON AND a.SOURCE = b.SOURCE AND a.QUAL > b.QUAL AND NOT ISNULL(a.ZNCH) AND NOT ISNULL(b.ZNCH)
Эта штуковина работает, однако по замыслу авторов для удаления этих записей замена SELECT a.* на DELETE a.* приводит к ошибке "Не возможно удаление записей из указанных таблиц", а справка говорит, что недостаточно прав в пяти вариациях... С чего бы? В свойствах запроса разрешения на удаление есть
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
19.02.2024, 20:51
Ответы с готовыми решениями:

Клавиша delete не работает,а вот shift + delete работает
Ни ничего не могу удалить как обычно клавишей delete работает только при сочетании shift + delete W7 64 bit Добавлено через 2 часа...

1. Реализовать функции для вставки и удаления строк аналогичные процедурам Insert и Delete в Турбо-Паскале.
Реализовать функции для вставки и удаления строк аналогичные процедурам Insert и Delete в Турбо-Паскале. Помогите,пожалуйста,завтра нужно...

Не работает функция для удаления повторяющихся символов в строке
Вместо удаления остается часть, например из EEEEEEE делается не E, а EEE к примеру, как исправить? string removeSymbols(string input) {...

134
 Аватар для POJIBOX
2 / 2 / 0
Регистрация: 03.06.2018
Сообщений: 163
21.02.2024, 17:31  [ТС]
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Jamaica Посмотреть сообщение
Я это понимаю, просто "вырезка" у меня получилась с уникальными метриками по дате.
Я пожалуй все-таки обращу внимание на наличие двух дат в строке DT - дата на которую прогноз и UDT дата составления прогноза. Первая дата никаким образом в фильтрации не участвует, а вот вторая - важный критерий для обновления данных.
Т.е. новые данные пишутся поверх старых по любому, а вот равные по времени только в том случае когда лучше качество

Добавлено через 4 минуты
Вообще наполнение с учетом предварительного удаления областей происходит по времени приблизительно одинаково - около 3 минут на моем компе, т.е. собственно операция DELETE выполняется махом, и вот дальше я не вижу смысла усложнять, нужно наиболее простую схему - при 3 минутах даже +- минута не играет роли, другое дело когда было 30 - 60 минут в зависимости от чистоты базы...
0
1333 / 551 / 112
Регистрация: 29.03.2016
Сообщений: 1,355
21.02.2024, 17:43
С критериями по датам Вы лучше меня разберетесь. Подход то одинаковый.

Взял "вырезку" за 2 дня, чтоб с нахлестом.

Время исполнения:
VBA - 2,85 сек
Запросы: 4,08 сек.
тут еще много разного НО, потому весьма условно.

Надеюсь, чего-нибудь полезного Вы за эти два дня извлекли.
ну а если нет, так хоть по развлекались.

Я что-то притомился уже, путаюсь в показаниях.
0
Модератор
Эксперт MS Access
6231 / 2909 / 707
Регистрация: 12.06.2016
Сообщений: 7,839
21.02.2024, 17:54
Цитата Сообщение от POJIBOX Посмотреть сообщение
действительно архивация срезала объем и они влезают
Спасибо.
Дело ещё не только в объеме, а и в разрешенных форматах файлов.
Форматы архивов допустимы, а формат mdb - нет.
0
 Аватар для POJIBOX
2 / 2 / 0
Регистрация: 03.06.2018
Сообщений: 163
21.02.2024, 18:01  [ТС]
Цитата Сообщение от Jamaica Посмотреть сообщение
Я что-то притомился уже, путаюсь в показаниях.
Спасибо Вам за уделенное время, я только так и не понял суть JOIN, особенно для UPDATE в какую сторону работают условия.
Посмотрите пожалуйста пост 54, такая схема должна работать? Там для меня понятнее принадлежность условий
0
1333 / 551 / 112
Регистрация: 29.03.2016
Сообщений: 1,355
21.02.2024, 18:21
Оба запроса п.54 имеют синтаксические ошибки.
В селекте только одна таблица, а условия отбора по полям двух таблиц?

доп. Не пользуйте в запросах функцию IsNull, пользуйте Is Null.
0
Модератор
Эксперт MS Access
6231 / 2909 / 707
Регистрация: 12.06.2016
Сообщений: 7,839
21.02.2024, 18:25
Цитата Сообщение от POJIBOX Посмотреть сообщение
ISNULL(Weather.ZNCH)
Просто совет:
В запросах лучше писать Weather.ZNCH Is Null, так как ISNULL(Weather.ZNCH) - вызов функции, выполняется дольше.
Не знаю, насколько дольше, но на очень больших объемах разница может ощущаться.
0
1333 / 551 / 112
Регистрация: 29.03.2016
Сообщений: 1,355
21.02.2024, 18:26
Вот в этом запросе, можно дополнить условия в секции where:
SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
UPDATE (
    SELECT Import.QUAL, Weather.QUAL, Weather.UDT, Import.UDT
    FROM Import LEFT JOIN Weather 
        ON (Import.SOURCE = Weather.SOURCE) 
        AND (Import.LON = Weather.LON) 
        AND (Import.LAT = Weather.LAT) 
        AND (Import.DT = Weather.DT) 
        AND (Import.ID_MD = Weather.ID_MD)
    WHERE 
        Weather.QUAL<Import.QUAL
# AND что-то еще
    ) AS Q 
SET 
    Q.Weather.QUAL = Q.Import.QUAL, 
    Q.Weather.UDT = Q.Import.UDT
0
 Аватар для POJIBOX
2 / 2 / 0
Регистрация: 03.06.2018
Сообщений: 163
21.02.2024, 18:37  [ТС]
Цитата Сообщение от Jamaica Посмотреть сообщение
Вот в этом запросе, можно дополнить условия в секции where:
Вот тут я и не понимаю, СЕЛЕКТ делает набор данных без привязки к 5 ключевым полям по сути? Или SET выполняется при нахождении каждой строки?

Добавлено через 5 минут
Блин, попробовал сделать таблицу Импорт...
Косяк - на пустой базе при выполнении первого скрипта копируются ТУПО ВСЕ ЗАПИСИ без фильтрации на качество и новизну

Ну а заполнение на 30% быстрее 2 минуты против 3 и еще секунд 40 на копирование всех записей включая 40% оценочно не нужных...
0
1333 / 551 / 112
Регистрация: 29.03.2016
Сообщений: 1,355
21.02.2024, 19:11
Цитата Сообщение от POJIBOX Посмотреть сообщение
СЕЛЕКТ делает набор данных без привязки к 5 ключевым полям по сути
упс, тут INNER JOIN нужен,
тогда можно так для наглядности перенести все во WHERE:
SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
UPDATE (
    SELECT Import.QUAL, Weather.QUAL, Weather.UDT, Import.UDT
    FROM Import, Weather 
    WHERE 
        (Import.SOURCE = Weather.SOURCE) 
        AND (Import.LON = Weather.LON) 
        AND (Import.LAT = Weather.LAT) 
        AND (Import.DT = Weather.DT) 
        AND (Import.ID_MD = Weather.ID_MD)
        AND Weather.QUAL < Import.QUAL
) AS Q 
SET 
    Q.Weather.QUAL = Q.Import.QUAL, 
    Q.Weather.UDT = Q.Import.UDT
0
 Аватар для POJIBOX
2 / 2 / 0
Регистрация: 03.06.2018
Сообщений: 163
21.02.2024, 19:29  [ТС]
Цитата Сообщение от Jamaica Посмотреть сообщение
упс, тут INNER JOIN нужен,
Да все не так просто, INSERT не работает, т.к. импортированные данные не фильтрованные и они пихаются в результирующую таблицу как есть, какой смысл в UPDATE, если часть записей уже пролезла нефильтрованной.

Я провернул удаление по ключу дубликатов это быстро, дольше подтверждал

Тут только вопрос может ключ не автоинкремент а случайный поставить, но со свойством уникальный?
0
1333 / 551 / 112
Регистрация: 29.03.2016
Сообщений: 1,355
21.02.2024, 19:46
Цитата Сообщение от POJIBOX Посмотреть сообщение
импортированные данные не фильтрованные
А что там еще нужно фильтровать?
Записи, совпадающие по значениям 5-ти значимых полей он вообще исключил из импорта,
то есть "дублей" в результирующей быть не должно.

Добавлено через 2 минуты
Цитата Сообщение от POJIBOX Посмотреть сообщение
Тут только вопрос может ключ не автоинкремент а случайный поставить, но со свойством уникальный?
Подозреваю что без разницы, главное чтобы уникальный индекс и без Null.
0
 Аватар для POJIBOX
2 / 2 / 0
Регистрация: 03.06.2018
Сообщений: 163
21.02.2024, 19:53  [ТС]
Цитата Сообщение от Jamaica Посмотреть сообщение
А что там еще нужно фильтровать?
Мы же договорились, что в Импорт я сую все подряд, а ИНСЕРТ отработал все записи без исключения в таблицу Weather, там же нет фильтрации какую запись оставить, там выбраны только параметры 5 главных полей для которых нет заполненных полей с данными
0
1333 / 551 / 112
Регистрация: 29.03.2016
Сообщений: 1,355
21.02.2024, 20:18
Цитата Сообщение от POJIBOX Посмотреть сообщение
а ИНСЕРТ отработал все записи без исключения в таблицу Weather,
На рис1 состояние до инсерта.
На рис2 состояние после инсерта.

Что инсерт сделал не так?
Миниатюры
Не работает DELETE для "повторяющихся" строк   Не работает DELETE для "повторяющихся" строк  
0
Эксперт MS Access
 Аватар для alvk
7459 / 4592 / 302
Регистрация: 12.08.2011
Сообщений: 14,383
22.02.2024, 02:25
Цитата Сообщение от POJIBOX Посмотреть сообщение
в моем случае "никогда" не будет за диапазоном 0-90 грд по широте
Не важно какая широта и долгота, это один из вариантов представления координат одним числом. Координаты в России, если что.
0
919 / 292 / 58
Регистрация: 01.06.2023
Сообщений: 818
22.02.2024, 08:00
Не получается создать групповой индекс из 3 полей -
Нужен обычный, не уникальный индекс
0
 Аватар для POJIBOX
2 / 2 / 0
Регистрация: 03.06.2018
Сообщений: 163
22.02.2024, 11:00  [ТС]
Цитата Сообщение от Jamaica Посмотреть сообщение
Что инсерт сделал не так?
Добрый день
Вы ж почему не понимаете, что не так, потому что у Вас наборы сформированные по моему старому алгоритму, когда происходила перезапись худшего качества.

Я попробовал сделать таблицу "Импорт" без замещения т.е. вгонять в нее все подряд (это быстрее на 30%), а потом уже выполнить команду ИНСЕРТ для всей таблицы в пустую главную таблицу, так с учетом того, что фильтров кроме как на отсутствие значения нет, команда ИНСЕРТ пихнула все существующие записи из таблицы "Импорт" и она так и будет это делать по отношению к дублирующим данным.

В итоге таблицу "Импорт" необходимо перед закачкой в главную все равно очистить от повторяющихся записей

Добавлено через 1 минуту
Цитата Сообщение от Swa111 Посмотреть сообщение
Нужен обычный, не уникальный индекс
Тогда может его сделать все ж таки по 5 основным полям? Включить туда широту и долготу?
0
Эксперт MS Access
 Аватар для alvk
7459 / 4592 / 302
Регистрация: 12.08.2011
Сообщений: 14,383
22.02.2024, 11:08
Цитата Сообщение от POJIBOX Посмотреть сообщение
В итоге таблицу "Импорт" необходимо перед закачкой в главную все равно очистить от повторяющихся записей
Сделайте запрос и его результат уже вгоняйте в главную
0
1333 / 551 / 112
Регистрация: 29.03.2016
Сообщений: 1,355
22.02.2024, 11:25
До меня в ночи дошло таки, когда стал добавлять в "пустышку" сначала данные из первого файла, затем из второго.
"Дубли" в обновлениях присутствуют в приличном количестве.

Получается, либо сначала чистить обновления, потом импортировать,
либо переносить логику добавления метрик на сервер.

Добавлено через 1 минуту
Цитата Сообщение от POJIBOX Посмотреть сообщение
В итоге таблицу "Импорт" необходимо перед закачкой в главную все равно очистить от повторяющихся записей
Писали одновременно.
Ну хорошо хоть сошлись во мнении.
0
 Аватар для POJIBOX
2 / 2 / 0
Регистрация: 03.06.2018
Сообщений: 163
22.02.2024, 11:43  [ТС]
Цитата Сообщение от Jamaica Посмотреть сообщение
либо переносить логику добавления метрик на сервер
Мы в ACCESS находимся, о каком сервере речь? Или Вы имеете ввиду на стороне БД? А какой выигрыш будет, коли процессорное время задействуется по сути одной машины?

Добавлено через 6 минут
Так, ну и теперь когда я добавил первичный ключ, скажите наконец по скольким полям проиндексировать таблицу?
0
1333 / 551 / 112
Регистрация: 29.03.2016
Сообщений: 1,355
22.02.2024, 11:48
Предполагаемые объемы данных тяжеловаты для БД Access,
потребуется переезд на серверную БД.
А там логику добавления можно описать в сохраненной процедуре.

Можно, конечно, и на стороне клиента попробовать,
но будет медленно, сильно подозреваю.

Я пробовал прямо в Access с его "родными" возможностями, импортировать "построчно",
первый файл - больше минуты, второй чуть быстрее.
А там метрик то пока всего ничего.

Попробуйте, может у Вас будет иначе.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
22.02.2024, 11:48

Для линейного вещественного массива найти произведение всех повторяющихся и не повторяющихся элементов
Для линейного вещественного массива Х найти произведение всех: а) повторяющихся элементов б) не повторяющихся элементов Добавлено...

Как вызвать "Delete" для строк?
with lst1.Items do for i:=1to TextEnd do begin s:=Strings; if Pos('(compInst',s)&gt;0then begin ...

Стандартная функция delete в Eclipse работает а в AndroidStudio не работает
case R.id.btnDelete: {//Кнопка удаление последнего символа ...

Почему не работает Update, но работает аналогичный Delete?
В xmal есть datagrid в него подтянута из базы информация. Название и количество. Надо сделать во viewmodel кнопки delete и update. Delete ...

Использование строк: Функция Delete(s1, s2)
Здравствуйте! В общем, мне нужно было создать функцию DELETE(s1, s2), которая удаляет из строки s1 все символы, встречающиеся в строке...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
80
Ответ Создать тему
Новые блоги и статьи
Когда логика программы не спасает от человеческих ошибок
Maks 18.08.2026
В последнее время всё чаще и чаще сталкиваюсь с таким явлением, как абсолютная невнимательность (или глупость) пользователей. Проявляется это чаще всего на работе в коллективе. Допустим, человек с. . .
Лето уходит
kumehtar 17.08.2026
Мысли в слух
kumehtar 17.08.2026
Забавно, насколько сейчас стала доступна информация. Например о магии, духовном развитии, медитациях, и других подобных направлениях, ранее зачастую тайных, передаваемых от учителя к ученику. Хотя. . .
Перемещение строк из ТЧ в другой документ с учетом текущего пробега
Maks 17.08.2026
Реализация из решения ниже выполнена на примере нетипового документа "Автозапчасти", с ТЧ "Шины". За основу взят алгоритм отсюда: https:/ / www. cyberforum. ru/ blogs/ 359708/ 10838. html Задача: . . .
Саморегулирующийся социальный контракт для сервера cross-section.
Hrethgir 14.08.2026
С кодом конечно таких глубоких размышлений пока не было, впрочем я уже привык к алгоритмизации. Суть предмета записи: снова в диалоге с нейросетью (я взял пока себе ник для учётки админа - Rector). . . .
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет: 1. Использовать системное время и дату, 2. Есть возможность вводить время и дату вручную. 3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber. Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео: https:/ / vkvideo. ru/ video-240781534_456239017 YouTube: eY5-5PyI9NM Текстовая версия
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru