#std435¶
Ограничение на использование конструкции "ПОЛНОЕ ВНЕШНЕЕ СОЕДИНЕНИЕ" в запросах¶
1.1.¶
При разработке запросов учитывайте, что в клиент-серверном варианте с СУБД PostgreSQL производительность запросов с конструкцией ПОЛНОЕ ВНЕШНЕЕ СОЕДИНЕНИЕ существенно снижается. Особенно если таких конструкций две и более.
Поэтому в общем случае эту конструкцию использовать не рекомендуется. Там, где возможно, переписывайте запрос без нее.
Например, исходный запрос:
ВЫБРАТЬ
ЕСТЬNULL(ПланПродаж.Номенклатура, ФактическиеПродажи.Номенклатура) КАК Номенклатура,
ЕСТЬNULL(ПланПродаж.Сумма, 0) КАК СуммаПлан,
ЕСТЬNULL(ФактическиеПродажи.Сумма, 0) КАК СуммаФакт
ИЗ
ПланПродаж КАК ПланПродаж
ПОЛНОЕ СОЕДИНЕНИЕ ФактическиеПродажи КАК ФактическиеПродажи
ПО ПланПродаж.Номенклатура = ФактическиеПродажи.Номенклатура
может быть реализован без ПОЛНОЕ [ВНЕШНЕЕ] СОЕДИНЕНИЕ так:
ВЫБРАТЬ
ПланФактПродаж.Номенклатура КАК Номенклатура,
СУММА(ПланФактПродаж.СуммаПлан) КАК СуммаПлан,
СУММА(ПланФактПродаж.СуммаФакт) КАК СуммаФакт
ИЗ
(ВЫБРАТЬ
ПланПродаж.Номенклатура КАК Номенклатура,
ПланПродаж.Сумма КАК СуммаПлан,
0 КАК СуммаФакт
ИЗ
ПланПродаж КАК ПланПродаж
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
ФактическиеПродажи.Номенклатура,
0,
ФактическиеПродажи.Сумма
ИЗ
ФактическиеПродажи КАК ФактическиеПродажи) КАК ПланФактПродаж
СГРУППИРОВАТЬ ПО
ПланФактПродаж.Номенклатура
1.2.¶
Исключение: случаи, когда запрос объективно нельзя переписать без ПОЛНОЕ ВНЕШНЕЕ СОЕДИНЕНИЕ.
Для СУБД PostgreSQL платформа 1С:Предприятие автоматически заменяет эту конструкцию на эквивалентную исполнимую форму, сохраняя атрибуты запроса: ПЕРВЫЕ, РАЗЛИЧНЫЕ, УПОРЯДОЧИТЬ ПО.
В таких случаях не нужно механически убирать ПОЛНОЕ ВНЕШНЕЕ СОЕДИНЕНИЕ только ради самого запрета.
2.¶
Недопустимо одновременно использовать ПОЛНОЕ СОЕДИНЕНИЕ и обращение к табличным частям из раздела ВЫБРАТЬ.
Требование связано с особенностями выполнения таких запросов на PostgreSQL и необходимостью переносимости прикладных решений на эту СУБД.