|
Булево вычитание в Аксес
|
|||
---|---|---|---|
#18+
Есть две таблицы с одинаковыми полями, но разными значениями. Необходимо одну из таблиц дополнить недостающими значениями из другой (типа синхронизировать). Использую такой запрос для выбора этих недостающих: SELECT GoodsTable.Barcode, GoodsTable.Name FROM GoodsTable WHERE GoodsTable.Barcode NOT IN (SELECT BarcodesTable.Barcode FROM BarcodesTable); Таблица BarcodesTable имеет почти 20 тысяч записей поэтому видимо запрос обрабатывается невероятноя количество времени. Что примечательно, без предиката NOT (то есть выборка всех совпадающих) запрос обрабатывается весьма быстро, хотя по идее разницы никакой - всё равно просматривать тот же список на 20 тысяч записей. Есть ли какой-то другой способ? Или это баг Ахсекса (использую 2002-й)? Заранее спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.05.2007, 15:17 |
|
Булево вычитание в Аксес
|
|||
---|---|---|---|
#18+
Можно переписать запрос так: SELECT GoodsTable.Barcode, GoodsTable.Name FROM GoodsTable LEFT JOIN BarcodesTable ON GoodsTable.Barcode = BarcodesTable.Barcode WHERE BarcodesTable.Barcode IS NULL А поля GoodsTable.Barcode и BarcodesTable.Barcode проиндексированы? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.05.2007, 15:30 |
|
Булево вычитание в Аксес
|
|||
---|---|---|---|
#18+
нот исключает исполжование индексов. поэтому может долшэ ... |
|||
:
Нравится:
Не нравится:
|
|||
12.05.2007, 15:36 |
|
Булево вычитание в Аксес
|
|||
---|---|---|---|
#18+
Я видимо не совсем точно выразился. Мне нужно получить список записей, отсутствующих в таблице BarcodesTable, но присутствующих в GoodsTable. Апри твоём варианте я получаю список записей, где значение поля Barcode null. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.05.2007, 15:38 |
|
Булево вычитание в Аксес
|
|||
---|---|---|---|
#18+
авторя получаю список записей, где значение поля Barcode null.Нет, это прием в SQL, позволяющий получить записи отсутствующие в другой таблице. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.05.2007, 15:42 |
|
Булево вычитание в Аксес
|
|||
---|---|---|---|
#18+
исполжуй каунт =0 ... |
|||
:
Нравится:
Не нравится:
|
|||
12.05.2007, 15:44 |
|
Булево вычитание в Аксес
|
|||
---|---|---|---|
#18+
mds_world авторя получаю список записей, где значение поля Barcode null.Нет, это прием в SQL, позволяющий получить записи отсутствующие в другой таблице. Я попробывал уже этот запрос в Аксесе - получил список записей GoodsTable, где Barcode - пустая строка. Можно про этот приём поподробнее? И что там насчёт каунта, можно тоже поразвёрнутей? Спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.05.2007, 15:48 |
|
Булево вычитание в Аксес
|
|||
---|---|---|---|
#18+
Попробуйте строку Where в таком виде Код: plaintext
... |
|||
:
Нравится:
Не нравится:
|
|||
12.05.2007, 15:54 |
|
Булево вычитание в Аксес
|
|||
---|---|---|---|
#18+
Спасибо огромное, mds_world! Это работает! Пойду дринкну за твоё здоровье! ... |
|||
:
Нравится:
Не нравится:
|
|||
12.05.2007, 16:00 |
|
Булево вычитание в Аксес
|
|||
---|---|---|---|
#18+
добрался до компутера not - исключает использование индекса по полю которое проверяется (пэтому скорость падает если поле проиндексировано) самый быстрый способ (независимо от того проиндексировано поле или нет) - это COUNT в подзапросе модифицированный ваш запрос Код: plaintext 1. 2.
... |
|||
:
Нравится:
Не нравится:
|
|||
12.05.2007, 16:06 |
|
Булево вычитание в Аксес
|
|||
---|---|---|---|
#18+
хотя join быстрее %) ... |
|||
:
Нравится:
Не нравится:
|
|||
12.05.2007, 16:08 |
|
Булево вычитание в Аксес
|
|||
---|---|---|---|
#18+
Вот я тупой был всего десять лет назад. Через десять лет ещё зайду, мне понравилось. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.05.2017, 15:02 |
|
Булево вычитание в Аксес
|
|||
---|---|---|---|
#18+
HuRNВот я тупой был всего десять лет назад. Через десять лет ещё зайду, мне понравилось. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.05.2017, 15:28 |
|
Булево вычитание в Аксес
|
|||
---|---|---|---|
#18+
ILL HEADхотя join быстрее %) Тоже недавно столкнулся. IN в Access-е жутко тормозит запрос. В MS SQL подобное отработало бы моментально. Так что если появились тормоза, то выходом может быть лишь перевод на JOIN. В моем случае пришлось данные подзапроса сбрасывать в буферную табличку и уже JOIN с ней, так как требовалось чтобы итоговый запрос был редактируемым. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2017, 08:33 |
|
|
start [/forum/topic.php?fid=45&fpage=74&tid=1612389]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
33ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
52ms |
get tp. blocked users: |
2ms |
others: | 13ms |
total: | 145ms |
0 / 0 |