Перейти к содержанию

Ограничение на использование конструкции "ПОЛНОЕ ВНЕШНЕЕ СОЕДИНЕНИЕ" в запросах

1.1. При разработке текстов запросов следует иметь в виду, что при работе в клиент-серверном варианте, когда в качестве СУБД используетсяPostgreSQL, производительность выполнения запросов с конструкциейПОЛНОЕ ВНЕШНЕЕ СОЕДИНЕНИЕ значительно снижается. В особенности это касается случаев, когда в запросе встречаются две и более таких конструкций. Поэтому в общем случае не рекомендуется использовать конструкцию ПОЛНОЕ ВНЕШНЕЕ СОЕДИНЕНИЕ в запросах. И в тех случаях, где это возможно, рекомендуется переписать текст исходного запроса без использования этой конструкции. Например, следующий запрос:

ВЫБРАТЬ
ЕСТЬNULL(ПланПродаж.Номенклатура, ФактическиеПродажи.Номенклатура) КАК Номенклатура,
ЕСТЬNULL(ПланПродаж.Сумма, 0) КАК СуммаПлан,
ЕСТЬNULL(ФактическиеПродажи.Сумма, 0) КАК СуммаФакт
ИЗ
ПланПродаж КАК ПланПродаж
ПОЛНОЕ СОЕДИНЕНИЕ ФактическиеПродажи КАК ФактическиеПродажи
ПО ПланПродаж.Номенклатура = ФактическиеПродажи.Номенклатура

может быть реализован без конструкции ПОЛНОЕ [ВНЕШНЕЕ] СОЕДИНЕНИЕ следующим образом:

ВЫБРАТЬ
ПланФактПродаж.Номенклатура КАК Номенклатура,
СУММА(ПланФактПродаж.СуммаПлан) КАК СуммаПлан,
СУММА(ПланФактПродаж.СуммаФакт) КАК СуммаФакт
ИЗ
(ВЫБРАТЬ
ПланПродаж.Номенклатура КАК Номенклатура,
ПланПродаж.Сумма КАК СуммаПлан,
0 КАК СуммаФакт
ИЗ
ПланПродаж КАК ПланПродаж

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
ФактическиеПродажи.Номенклатура,
0,
ФактическиеПродажи.Сумма
ИЗ
ФактическиеПродажи КАК ФактическиеПродажи) КАК ПланФактПродаж

СГРУППИРОВАТЬ ПО
ПланФактПродаж.Номенклатура

1.2. Исключение составляют случаи, когда текст исходного запроса не может быть переписан без использования конструкции ПОЛНОЕ ВНЕШНЕЕ СОЕДИНЕНИЕ по объективным причинам. Следует иметь в виду, что при выполнении данной конструкции на СУБД PostgreSQL она автоматически заменяется платформой 1С:Предприятие на эквивалентную, которая может быть исполнена в СУБД PostgreSQL. При этом сохраняются все атрибуты запроса, такие как модификаторы ПЕРВЫЕ, РАЗЛИЧНЫЕ, а также УПОРЯДОЧИТЬ ПО. В таких случаях не следует "механически" заменять конструкцию ПОЛНОЕ ВНЕШНЕЕ СОЕДИНЕНИЕ только с той целью, чтобы от нее избавиться в тексте запроса.

  1. Не допускается одновременно использовать конструкцию ПОЛНОЕ СОЕДИНЕНИЕ и обращение к табличным частям из раздела ВЫБРАТЬ. Данное требование продиктовано особенностью выполнения подобных запросов на СУБД PostgeSQL и необходимостью переносимости прикладных решений на эту СУБД.

Экранирование кода

// sonar:UsingFullOuterJoin:off
// sonar:UsingFullOuterJoin:on