|
Исключить записи одной таблицы из другой в запросе |
☑ |
0
Filkkore
01.07.23
✎
22:49
|
1С БП 3
Платформа 8.3.20.2184
Задача такова:
Получить документы, которые НЕ интегрированы с 1С ДО. Соответственно мне нужно получить в запросе документы и исключить из их списка те, которые присутствуют в Регистре сведений "ОбъектыИнтегрированныеС1СДокументооборотом".
Я знаю два способа это сделать.
Первый:
ВЫБРАТЬ
ПоступлениеТоваровУслуг.Ссылка КАК Ссылка
ИЗ
Документ.ПоступлениеТоваровУслуг КАК ПоступлениеТоваровУслуг
ГДЕ
НЕ ПоступлениеТоваровУслуг.Ссылка В
(ВЫБРАТЬ
ОбъектыИнтегрированныеС1СДокументооборотом.Объект
ИЗ
РегистрСведений.ОбъектыИнтегрированныеС1СДокументооборотом КАК ОбъектыИнтегрированныеС1СДокументооборотом)
Второй:
ВЫБРАТЬ
ПоступлениеТоваровУслуг.Ссылка КАК Ссылка
ИЗ
Документ.ПоступлениеТоваровУслуг КАК ПоступлениеТоваровУслуг
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ОбъектыИнтегрированныеС1СДокументооборотом КАК ОбъектыИнтегрированныеС1СДокументооборотом
ПО ПоступлениеТоваровУслуг.Ссылка = ОбъектыИнтегрированныеС1СДокументооборотом.Объект
ГДЕ
ОбъектыИнтегрированныеС1СДокументооборотом.Объект ЕСТЬ NULL
Нет ли варианта, работающего быстрее, например Связью?
|
|
1
Garykom
01.07.23
✎
23:22
|
(0) Левое соединение и ЕСТЬNULL
|
|
2
Filkkore
02.07.23
✎
14:01
|
(1) То есть лучше этого ничего не предусмотрено? Я кстати тестил в консоли оба этих варианта на большом объеме данных, и вариант с левым соединением и ЕСТЬNULL отрабатывает в среднем чуть медленнее, так что из этих двух я бы скорее выбрал первый.
|
|
3
Filkkore
02.07.23
✎
14:10
|
Хотя возможно с появлением большего количества записей в Регистре скорость работы первого упадет заметнее чем у второго...
|
|
4
Garykom
02.07.23
✎
17:52
|
(3) С появлением большого кол-ва записей в РС ОбъектыИнтегрированныеС1СДокументооборотом есть риск что первый запрос начнет падать от нехватки памяти
Ну или тормозить от свопа
|
|