|
Порядок выполнения нескольких условии при соединении таблиц в запросе |
☑ |
0
lirt82
24.06.20
✎
06:03
|
Коллеги, правильно ли я понимаю что если используется более одного соединения таблиц в запросе то второе соединение берет результат первого?
пример
ИЗ
РегистрНакопления.ТоварыНаСкладах.Обороты(&НачПериода, &КонПериода, Регистратор, ) КАК ТоварыНаСкладахОбороты
ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПоступлениеТоваровУслуг.Товары КАК ПоступлениеТоваровУслугТовары (в результате этого соединения получаем таблицу с 10-ю записями)
ЛЕВОЕ СОЕДИНЕНИЕ Документ.СчетФактураПолученный.ДокументыОснования КАК СчетФактураПолученныйДокументыОснования (и теперь во втором соединении 10 записей полученных в результате первого соединения связываем с таблицей СчетФактураПолученныйДокументыОснования)
ПО ПоступлениеТоваровУслугТовары.Ссылка = СчетФактураПолученныйДокументыОснования.ДокументОснование
ПО ТоварыНаСкладахОбороты.Регистратор = ПоступлениеТоваровУслугТовары.ПриходныйОрдер
|
|
1
lirt82
24.06.20
✎
06:16
|
(0) поправка при условии что во втором соединении берется результат первого соединения если таблица одинаковая, в примере это таблица Документ.ПоступлениеТоваровУслуг.Товары
|
|
2
Конструктор1С
24.06.20
✎
07:12
|
(0) не пиши такие запросы
"правильно ли я понимаю что если используется более одного соединения таблиц в запросе то второе соединение берет результат первого?"
Для разных типов соединений работает по-разному
|
|
3
dmpl
24.06.20
✎
07:12
|
(0) Решает оптимизатор SQL. Иногда вложенный запрос с отбором по условию из первой таблицы дает ускорение, иногда нет.
|
|
4
Вафель
24.06.20
✎
07:26
|
нужно понимать что на физ уровне соединения бываю 3х видов лукапс хэш мердж последний самый эффективный но требует индекса
|
|
5
bolder
24.06.20
✎
07:34
|
(0) Так как второе соединение имеет связь только с результатами первого - то очевидно будет такой результат.
|
|