1С Предприятие 8.0. Описание встроенного языка

         

Спецификации соединений


При определении нескольких источников в списке источников для каждой записи из первой таблицы-источника осуществляется выборка из второй таблицы-источника, и т.д. Таким образом, в результате запроса формируются все возможные комбинации всех записей из всех указанных источников.

Пример:

Выбрать

Контрагенты.Ссылка Как Контрагент,

    Банки.Ссылка Как Банк

Из

    Справочник.Контрагенты Как Контрагенты,

    Справочник.Банки Как Банки

Результат запроса:



Контрагент Банк
Поставщики АКБ ИвестБанк
Поставщики АКБ ПромСтройБанк
Трикотажная фабрика «Заря» АКБ ИвестБанк
Трикотажная фабрика «Заря» АКБ ПромСтройБанк
Фабрика джинсовой одежды АКБ ИвестБанк
Фабрика джинсовой одежды АКБ ПромСтройБанк
Покупатели АКБ ИвестБанк
Покупатели АКБ ПромСтройБанк
Ярмарка одежды АКБ ИвестБанк
Ярмарка одежды АКБ ПромСтройБанк
Торговый дом «Буденовский» АКБ ИвестБанк
Торговый дом «Буденовский» АКБ ПромСтройБанк
Павильон 45 на оптовом рынке АКБ ИвестБанк
Павильон 45 на оптовом рынке АКБ ПромСтройБанк
Бавария - фарфор АКБ ИвестБанк
Бавария - фарфор АКБ ПромСтройБанк
Фабрика джинсовой одежды АКБ ИвестБанк
Фабрика джинсовой одежды АКБ ПромСтройБанк
АКБ ПромСтройБанк АКБ ИвестБанк
АКБ ПромСтройБанк АКБ ПромСтройБанк

Результат запроса содержит комбинации всех контрагентов со всеми банками. Как правило, такой результат сам по себе смысла не имеет. Обычно комбинации записей из разных исходных таб­лиц требуется ограничить какими-либо условиями. В языке за­просов имеется возможность описать такое соединение источни­ков, указывая сами источники и определяя условия, в соответст­вии с которыми комбинации записей из этих источников требует­ся включить в результат запроса.

Соединения бывают нескольких видов, они описываются сле­дующими правилами:

<Перечень соединений>

<Соединение> [<Перечень соединений>]

В общем случае <Перечень соединений> может содержать и описывать не только одно соединение (двух источников), но и несколько соединений нескольких источников сразу.




<Соединение>

[ВНУТРЕННЕЕ] СОЕДИНЕНИЕ <Описание источника> ПО <Условие отбора> |

ЛЕВОЕ [ВНЕШНЕЕ] СОЕДИНЕНИЕ <Описание источника> ПО <Условие отбора> |

ПРАВОЕ [ВНЕШНЕЕ] СОЕДИНЕНИЕ <Описание источника> ПО <Условие отбора> |

ПОЛНОЕ (ВНЕШНЕЕ] СОЕДИНЕНИЕ <Описание источника> ПО <Условие отбора>

<Описание источника> содержит описание исходной табли­цы - см. раздел « Описание источников запроса» на стр. 305.

<Условие отбора> содержит условия, в соответствии с кото­рыми в выборке необходимо соединить данные из исходных таб­лиц - источников запроса. Правила описания условий в языке запросов рассматриваются на стр. 357.

Ключевые слова ЛЕВОЕ, ПРАВОЕ и ПОЛНОЕ уточняют характер соединения. Слова ВНУТРЕННЕЕ или ВНЕШНЕЕ можно не указывать вообще, они повышают наглядность и удобочитаемость тек­ста запроса.

Соединяемые источники не равнозначны между собой, и в неко­торых случаях результат зависит от того, какая таблица указана первой, до ключевого слова СОЕДИНЕНИЕ (слева от него), а какая - второй (справа).

Внутреннее соединение

[ВНУТРЕННЕЕ] СОЕДИНЕНИЕ означает, что из обеих исходных таблиц - источников данных в результат запроса необходимо включить только те комбинации записей, которые соответствуют указанному условию. Остальные записи в результат не попадают.

Пример:

// Необходимо выяснить, какие банки является одновременно

// контрагентами (одинаковые наименования присутствует

//и в справочнике Контрагенты, и в справочнике Банки).

Выбрать

    Контрагенты.Ссылка Как Контрагент,

    Банки.Ссылка Как Банк

Из

    Справочник.Контрагенты Как Контрагенты

Внутреннее Соединение

    Справочник.Банки Как Банки

По

    Контрагенты.Наименование = Банки.Наименование

Результат запроса:

Контрагент Банк
АКБ ПромСтройБанк АКБ ПромСтройБанк
Левое внешнее соединение

ЛЕВОЕ [ВНЕШНЕЕ] СОЕДИНЕНИЕ означает, что в результат запроса надо включить комбинации записей из обеих исходных таблиц, которые соответствуют указанному условию. Но, в отли­чие от внутреннего соединения, в результат запроса надо вклю­чить также еще и записи из первого (указанного слева от слова СОЕДИНЕНИЕ) источника, для которых не найдено соответст­вующих условию записей из второго источника.



Таким образом, в результат запроса будут включены все записи из первого источника; они будут соединены с записями из второ­го источника при выполнении указанного условия. Строки ре­зультата запроса, для которых не найдено соответствующих усло­вию записей из второго источника, будут содержать NULL в по­лях, формируемых на основании записей из этого источника.

Пример:

//В отчет необходимо вывести всех контрагентов, а для тех,

// кто является также банком - указать ссылку на банк.

Выбрать

    Контрагенты.Ссылка Как Контрагент,

    Банки.Ссылка Как Банк

Из

    Справочник.Контрагенты Как Контрагенты

Левое Внешнее Соединение

    Справочник.Банки Как Банки

По

    Контрагенты.Наименование = Банки.Наименование

Результат запроса:

Контрагент Банк
Поставщики NULL
Трикотажная фабрика «Заря» NULL
Фабрика джинсовой одежды NULL
Покупатели NULL
Ярмарка одежды NULL
Торговый дом «Буденовский» NULL
Павильон 45 на оптовом рынке NULL
Бавария - фарфор NULL
Фабрика джинсовой одежды NULL
АКБ ПромСтройБанк АКБ ПромСтройБанк
Правое внешнее соединение

ПРАВОЕ [ВНЕШНЕЕ] СОЕДИНЕНИЕ означает, что в результат запроса надо включить комбинации записей из обеих исходных таблиц, которые соответствуют указанному условию. Кроме того, в результат запроса надо включить также еще и записи из второго (указанного справа от слова СОЕДИНЕНИЕ) источника, для кото­рых не найдено соответствующих условию записей из первого ис­точника.

Таким образом, в результат запроса будут включены все записи из второго источника; они будут соединены с записями из перво­го источника при выполнении указанного условия. Строки ре­зультата запроса, для которых не найдено соответствующих усло­вию записей из первого источника, будут содержать NULL в по­лях, формируемых на основании записей из этого источника.

Пример:

//В отчет необходимо вывести все банки, а для тех,



// кто является также и контрагентом - указать ссылку на контрагента.

ВЫБРАТЬ

    Контрагенты.Ссылка Как Контрагент,

    Банки.Ссылха Как Банк

ИЗ

    Справочник.Контрагенты Как Контрагенты

Правое Внешнее Соединение

    Справочник.Банки Как Банки

По

    Контрагенты.Наименование = Банки.Наименование

Результат запроса:

Контрагент Банк
NULL АКБ ИвестБанк
АКБ ПромСтройБанк АКБ ПромСтройБанк
Полное внешнее соединение

ПОЛНОЕ [ВНЕШНЕЕ] СОЕДИНЕНИЕ означает, что в результат запроса надо включить комбинации записей из обеих исходных таблиц, которые соответствуют указанному условию. Кроме того, в результат запроса надо включить также еще и те записи из обо­их источников, для которых не найдено соответствий.

Таким образом, в результат запроса будут включены все записи из обоих источников; они будут соединены друг с другом при вы­полнении указанного условия. Строки результата запроса, для которых не найдено соответствующих условию записей из какого-либо источника, будут содержать NULL в полях, формируемых на основании записей из этого источника.

Пример:

// В отчет необходимо вывести всех контрагентов и все банки,

// а.тех, кто является и тем, и другим - вывести в одной строке.

Выбрать

    Контрагенты.Ссылка Как Контрагент,

    Банки.Ссылка Как Банк

Из

    Справочник.Контрагенты Как Контрагенты

Полное Внешнее Соединение

    Справочник.Банки Как Банки

По

    Контрагенты.Наименование = Банки.Наименование

Результат запроса:

Контрагент Банк
Поставщики NULL
Трикотажная фабрика «Заря» NULL
Фабрика джинсовой одежды NULL
Покупатели NULL
Ярмарка одежды NULL
Торговый дом «Буденовский» NULL
Павильон 45 на оптовом рынке NULL
Бавария - фарфор NULL
Фабрика джинсовой одежды NULL
АКБ ПромСтройБанк АКБ ПромСтройБанк
NULL АКБ ИвестБанк

Содержание раздела