powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Булево вычитание в Аксес
14 сообщений из 14, страница 1 из 1
Булево вычитание в Аксес
    #34520959
HuRN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть две таблицы с одинаковыми полями, но разными значениями. Необходимо одну из таблиц дополнить недостающими значениями из другой (типа синхронизировать). Использую такой запрос для выбора этих недостающих:
SELECT GoodsTable.Barcode, GoodsTable.Name
FROM GoodsTable WHERE GoodsTable.Barcode NOT IN (SELECT BarcodesTable.Barcode FROM BarcodesTable);

Таблица BarcodesTable имеет почти 20 тысяч записей поэтому видимо запрос обрабатывается невероятноя количество времени. Что примечательно, без предиката NOT (то есть выборка всех совпадающих) запрос обрабатывается весьма быстро, хотя по идее разницы никакой - всё равно просматривать тот же список на 20 тысяч записей. Есть ли какой-то другой способ? Или это баг Ахсекса (использую 2002-й)?

Заранее спасибо.
...
Рейтинг: 0 / 0
Булево вычитание в Аксес
    #34520969
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Можно переписать запрос так:

SELECT GoodsTable.Barcode, GoodsTable.Name
FROM GoodsTable LEFT JOIN BarcodesTable
ON GoodsTable.Barcode = BarcodesTable.Barcode
WHERE BarcodesTable.Barcode IS NULL

А поля GoodsTable.Barcode и BarcodesTable.Barcode проиндексированы?
...
Рейтинг: 0 / 0
Булево вычитание в Аксес
    #34520973
ылхет
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
нот исключает исполжование индексов. поэтому может долшэ
...
Рейтинг: 0 / 0
Булево вычитание в Аксес
    #34520977
HuRN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я видимо не совсем точно выразился. Мне нужно получить список записей, отсутствующих в таблице BarcodesTable, но присутствующих в GoodsTable. Апри твоём варианте я получаю список записей, где значение поля Barcode null.
...
Рейтинг: 0 / 0
Булево вычитание в Аксес
    #34520979
Фотография mds_world
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторя получаю список записей, где значение поля Barcode null.Нет, это прием в SQL, позволяющий получить записи отсутствующие в другой таблице.
...
Рейтинг: 0 / 0
Булево вычитание в Аксес
    #34520981
ылхет
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
исполжуй каунт =0
...
Рейтинг: 0 / 0
Булево вычитание в Аксес
    #34520988
HuRN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mds_world авторя получаю список записей, где значение поля Barcode null.Нет, это прием в SQL, позволяющий получить записи отсутствующие в другой таблице.
Я попробывал уже этот запрос в Аксесе - получил список записей GoodsTable, где Barcode - пустая строка. Можно про этот приём поподробнее? И что там насчёт каунта, можно тоже поразвёрнутей? Спасибо.
...
Рейтинг: 0 / 0
Булево вычитание в Аксес
    #34520993
Фотография mds_world
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробуйте строку Where в таком виде
Код: plaintext
WHERE (BarcodesTable.Barcode IS NULL) And (GoodsTable.Barcode Is Not Null)
...
Рейтинг: 0 / 0
Булево вычитание в Аксес
    #34520996
HuRN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо огромное, mds_world! Это работает! Пойду дринкну за твоё здоровье!
...
Рейтинг: 0 / 0
Булево вычитание в Аксес
    #34520998
Фотография ILL HEAD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
добрался до компутера
not - исключает использование индекса по полю которое проверяется (пэтому скорость падает если поле проиндексировано)
самый быстрый способ (независимо от того проиндексировано поле или нет) - это COUNT в подзапросе
модифицированный ваш запрос
Код: plaintext
1.
2.
SELECT GoodsTable.Barcode, GoodsTable.Name
FROM GoodsTable as t2
WHERE (SELECT count(*) FROM BarcodesTable as t1 where t1.Barcode=t2.Barcode)= 0 ;
...
Рейтинг: 0 / 0
Булево вычитание в Аксес
    #34521001
Фотография ILL HEAD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
хотя join быстрее %)
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Булево вычитание в Аксес
    #39460500
HuRN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот я тупой был всего десять лет назад. Через десять лет ещё зайду, мне понравилось.
...
Рейтинг: 0 / 0
Булево вычитание в Аксес
    #39460517
Прогер_самоучка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HuRNВот я тупой был всего десять лет назад. Через десять лет ещё зайду, мне понравилось.
...
Рейтинг: 0 / 0
Булево вычитание в Аксес
    #39460762
AndrF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ILL HEADхотя join быстрее %)

Тоже недавно столкнулся. IN в Access-е жутко тормозит запрос. В MS SQL подобное отработало бы моментально.

Так что если появились тормоза, то выходом может быть лишь перевод на JOIN. В моем случае пришлось данные подзапроса сбрасывать в буферную табличку и уже JOIN с ней, так как требовалось чтобы итоговый запрос был редактируемым.
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Булево вычитание в Аксес
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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