Что такое левое соединение в запросе 1с
Перейти к содержимому

Что такое левое соединение в запросе 1с

  • автор:

Предложение ИЗ (FROM) в языке запросов 1С:Предприятия 8

В данной статье рассмотрено предложение ИЗ, его место и роль в языке запросов 1С:Предприятия 8.

Предложение ИЗ присутствует почти в каждом запросе 1С:Предприятия 8, так как в большинстве случаев именно в нем указываются таблицы-источники данных для запроса. Кроме того, предложение ИЗ позволяет выполнить соединение нескольких таблиц, а также указать параметры при получении виртуальной таблицы.

Ниже рассмотрены следующие темы:

  • Место предложения ИЗ в структуре запроса 1С:Предприятия 8
  • Таблицы-источники данных
  • Примеры запросов с предложением ИЗ:
    • Выборка данных из различных таблиц-источников
    • Виртуальные таблицы
    • Псевдонимы источников
    • Вложенный запрос как источник
    • Соединение таблиц

    Место предложения ИЗ в структуре запроса

    Структуру запроса 1С:Предприятия 8 можно представить в виде следующей схемы:

    Из приведенной схемы можно сделать следующие выводы:

    • В запросе может не быть предложения ИЗ (если поля в списке выборки полностью квалифицированы, т.е. включают имя таблицы).
    • Источников в запросе может быть несколько (в этом случае, они обычно соединяются по определенному условию)
    • В качестве источника может быть обычная таблица-источник, виртуальная таблица с параметрами, а также вложенный запрос
    • Для источника можно назначить псевдоним с помощью ключевого слова КАК ( Внимание: если источником является вложенный запрос, то псевдоним обязателен).

    Таблицы-источники

    Все таблицы-источники можно поделить на три класса:

    • Таблицы, связанные со ссылочными объектами конфигурации (справочники, планы, документы и журналы документов)
    • Таблицы, связанные с регистрами (сведений, накопления, бухгалтерии, расчета)
    • Таблицы, связанные с остальными объектами конфигурации (константы, последовательности, критерии отбора)

    На следующих схемах применяются следующие условные обозначения:

    1. Таблицы-источники, связанные со ссылочными объектами конфигурации:

    2. Таблицы-источники, связанные с регистрами:

    3. Таблицы-источники, связанные с другими объектами конфигурации:

    Примеры запросов с предложением ИЗ

    Выборка данных из различных таблиц-источников

    Выборка элементов справочника:

    ВЫБРАТЬ *, Представление ИЗ Справочник.Номенклатура

    Выборка документов определенного вида:

    ВЫБРАТЬ Ссылка, Номер, Дата, Представление
    ИЗ Документ.АвансовыйОтчет

    Выборка проведенных документов, входящих в журнал СкладскиеДокументы:

    ВЫБРАТЬ Ссылка, Номер, Дата
    ИЗ ЖурналДокументов.СкладскиеДокументы
    ГДЕ Проведен = Истина

    Выборка активных записей регистра накопления:

    ВЫБРАТЬ Номенклатура, ПодразделениеКомпании, СуммаПродажи
    ИЗ РегистрНакопления.ПродажиКомпании
    ГДЕ Активность = Истина

    Выборка данных из табличной части документа:

    //обращение к табличной части документа
    ВЫБРАТЬ Номенклатура, Количество
    ИЗ Документ.АвансовыйОтчет.Товары

    При обращении к табличной части документа как источнику данных обычные реквизиты документа доступны через поле табличной части Ссылка, например:

    ВЫБРАТЬ Ссылка.Номер, Ссылка.Дата, Номенклатура, Количество
    ИЗ Документ.АвансовыйОтчет.Товары

    Виртуальные таблицы

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

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

    //обращение к виртуальной таблице регистра накопления (вызов без параметров)
    ВЫБРАТЬ * ИЗ РегистрНакопления.ПродажиКомпании.Обороты

    //выборка оборотов за период
    ВЫБРАТЬ * ИЗ РегистрНакопления.ПродажиКомпании.Обороты(&Нач, &Кон,,)

    //выборка оборотов по конкретному товару
    ВЫБРАТЬ * ИЗ РегистрНакопления.ПродажиКомпании.Обороты(. Номенклатура = &ВыбТовар)

    //остатки товаров на определенную дату
    ВЫБРАТЬ * ИЗ РегистрНакопления.ОстаткиТоваровКомпании.Остатки(&ВыбДата,)

    Замечание. Виртуальная таблица «Остатки», а также «ОстаткиИОбороты» существуют только у регистра накопления типа «Остатки». Виртуальная таблица «Обороты» существует у регистра оборотов и регистра остатков.Виртуальная таблица «ОборотыДтКт» существует только у регистра бухгалтерии с поддержкой корреспонденции.

    Псевдонимы источников

    Для источников можно задавать псевдонимы с помощью ключевого слова КАК (AS). Тогда при обращении к полям в списке полей выборки, условии и т.д. можно использовать псевдоним (а иногда без этого не обойтись).

    ВЫБРАТЬ Продажи.Номенклатура,
    Продажи.ПодразделениеКомпании,
    Продажи.СуммаПродажи
    ИЗ РегистрНакопления.ПродажиКомпании КАК Продажи
    ГДЕ Активность = Истина

    Вложенный запрос как источник

    В системе 1С:Предприятие 8 можно указать в качестве источника другой запрос, т.е. запрос может выбирать данные из вложенного запроса. Для вложенного запроса обязательно указывается псевдоним источника, как показано в следующем примере:

    ВЫБРАТЬ
    Товары.Номенклатура КАК Товар,
    Товары.Номенклатура.Артикул
    ИЗ
    (
    ВЫБРАТЬ Номенклатура ИЗ Документ.ВнутреннийЗаказ.Товары
    ОБЪЕДИНИТЬ
    ВЫБРАТЬ Номенклатура ИЗ Документ.ЗаказПокупателя.Товары
    ) КАК Товары

    Соединение таблиц

    Важной возможностью языка запросов системы 1С:Предприятие 8 является обращение сразу к нескольким таблицам. При этом их можно соединять определенным образом.

    Рассмотрим сначала, что произойдет, если в предложении ИЗ будет несколько источников. В этом случае будет сформировано «декартово произведение» двух множеств. Каждой записи одной таблицы будут сопоставлены все записи из другой. Например,

    ВЫБРАТЬ Спр.Ссылка, ДокТовары.Номенклатура
    ИЗ Справочник.Номенклатура КАК Спр, Документ.АвансовыйОтчет.Товары КАК ДокТовары

    Результат запроса содержит все комбинации записей из двух таблиц друг с другом:

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

    При внутреннем соединении в результат запроса попадают только записи удовлетворяющие заданному условию. В связанных таблицах обычно есть одно поле, значения в котором совпадают в двух таблицах, например, ссылка на элемент справочника Номенклатура. Допустим, необходимо выбрать все проданные товары и вывести их в отчет с указанием артикула. Это делает представленный ниже запрос:

    ВЫБРАТЬ ДокТовары.Номенклатура, Спр.Артикул, ДокТовары.Количество, ДокТовары.Сумма
    ИЗ Справочник.Номенклатура КАК Спр
    СОЕДИНЕНИЕ Документ.АвансовыйОтчет.Товары КАК ДокТовары
    ПО Спр.Ссылка = ДокТовары.Номенклатура

    Результат этого запроса будет следующий:

    Замечание. В данном примере того же эффекта можно добиться, если просто обращаться к имени поля через точку, что называется разыменованием ссылочных полей . При этом соединение таблиц производится неявно. Возможность разыменования полей в 1С:Предприятии 8 допускает обращение к свойствам объектов через несколько точек, например, «Номенклатура.Поставщик.Страна». Это позволяет значительно упростить написание запросов.

    Если в таблице будет найдено несколько записей, удовлетворяющих условию соединения, то в результат запроса будут включены все эти записи (см. ниже две записи по номенклатуре «Женские сапоги коричневые»):

    Замечание. При соединениях чаще всего применяется условие на «равно», но в языке запросов есть возможность использовать все операции сравнения и логические операции И, ИЛИ, НЕ.

    Левое внешнее соединение

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

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

    Обратите внимание, что NULL-значения не являются нулем или пустой строкой. Это специальные маркеры, обозначающие неуказанные (отсутствующие) значения или значения, не имеющие смысла.

    Например, нужно показать курсы всех валют, которые хранятся в регистре сведений КурсыВалют. Возможно, что для некоторой валюты не будет найдено соответствующей записи в регистре сведений, но она также должна попасть в отчет:

    ВЫБРАТЬ Спр.Наименование КАК Валюта, Рег.Курс
    ИЗ Справочник.Валюты КАК Спр
    ЛЕВОЕ ВНЕШНЕЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют.СрезПоследних КАК Рег
    ПО Спр.Ссылка = Рег.Валюта

    Результат запроса показан в следующей таблице:

    Для валюты «AUD» (Австралийский доллар) в таблице среза последних записей регистра сведений «КурсыВалют» не было найдено соответствующей записи, поэтому в поле «Курс» содержится значение NULL.

    Правое внешнее соединение

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

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

    Правое внешнее соединение полностью аналогично левому, за исключением того, что таблицы поменялись местами. Например, представленный ниже запрос эквивалентен предыдущему, но вместо левого, используется правое внешнее соединение:

    ВЫБРАТЬ Спр.Наименование КАК Валюта, Рег.Курс
    ИЗ РегистрСведений.КурсыВалют.СрезПоследних() КАК Рег
    ПРАВОЕ ВНЕШНЕЕ СОЕДИНЕНИЕ Справочник.Валюты КАК Спр
    ПО Спр.Ссылка = Рег.Валюта

    Полное внешнее соединение

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

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

    Таким образом, предложение ИЗ является одним из самых важных элементов языка запросов, поскольку позволяет указать таблицы-источники для запроса. Гибкие возможности предложения ИЗ позволяют использовать язык запросов для решения самых разнообразных задач.

    Запросы

    Запросы представляют собой, табличную модель доступа к данным. С помощью запросов удобно организовывать чтение данных, по той причине, что с помощью одного запроса (здесь читаем обращения к серверу) можно в большинстве случаев получить все необходимые для работы данные. В случае с объектной моделью доступа(работа с классом Справочник.Выборка ), при получении каждого элемента в переборе система будет обращаться к серверу. В том случае если база 1С работает под управлением СУБД (клиент-серверный вариант) использование запросов является более оптимальным, потому что работа СУБД ориентирована на использование запросов. Результатом запроса всегда является одна таблица за исключением специфических случаев (например в случае пакетного запроса).

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

    Виды таблиц

    Таблицы в 1С делятся на реальные и виртуальные. Реальные таблицы, это те которые действительно существуют в базе данных. Виртуальные таблицы в базе не существуют, и представляют по сути, функции которые возвращают определенным образом отфильтрованные данные из реальных таблиц. Эти таблицы сделаны для удобства разработчиков. У виртуальных таблиц могут быть параметры. Для таблиц оборотов регистра накопления к примеру можно указать дату начала и дату окончания выборки оборотов. А для таблицы остатков этого же регистра, можно указать только дату, на которую будут получены остатки. Для этой таблицы можно указать условие (этим условием может быть отдельный запрос) и тогда будет наложен фильтр с указанным условием.

    Если используется какое-либо условие при обращении к виртуальной таблице, необходимо указывать его в параметрах виртуальной таблицы, а не на закладке «Условия». Так как если указать условие в параметрах фильтр будет наложен в момент выполнения запроса к реальной таблице, а если указать в условии, то данные сначала будут получены, в полном объеме а уже потом наложен фильтр. В некоторых случаях такой запрос может оказаться просто "неподъемным" для сервера.

    Не следует переоценивать роль параметров виртуальной таблицы. Бывает начинающие разработчики разобравшись как устанавливаются параметры в виртуальных таблицах, начинают использовать их вместо реальных, даже когда в этом нет необходимости, объясняя это тем, что параметры виртуальной таблицы, работают быстро, а условие в запросе медленно. Так как обращение к виртуальной таблице, это все равно, сложный развернутый запрос к реальной таблице, то такой подход, конечно, не имеет смысла. Запрос объявляется следующим образом:

    Основной синтаксис языка запросов.

    Для составления запроса, рекомендуется пользоваться конструктором запросов, по крайней мере в первое время, бывают случаи когда проще оперировать блоками текста, чем щелкать мышкой, но это происходит не часто и если вы начинающий разработчик, то конструктор запроса, единственный инструмент для построения запроса. Опишем основные разделы часто используемые при построении запросов, полный перечень и все элементы которые можно использовать при построении запроса с детальным описанием, можно увидеть в справке.

    Таблицы и поля

    Любой запрос начинается с выражения «Выбрать» или Select, далее следуют перечисление полей которые вы хотите видеть в запросе и источник откуда будут браться эти поля как в запросе выше, в качестве источника могут быть как таблицы базы данных, так и связи этих таблиц. Если в запросе создаются временные таблицы, после перечисления полей должно стоять ключевое слово "Поместить" и имя временной таблицы.

    Группировка строк запроса.

    При формировании запроса очень часто бывает необходимо "свернуть" данные запроса, то есть к примеру у нас в результате выборки получились такие записи

    Здесь в процессе группировки в качестве группируемых полей будет выступать сотрудник, в качестве суммируемых сумма. В итоге мы должны получить следующие записи:

    Не следует путать группировку и итоги, что бы закрепить понимание, нужно запомнить, что в результате группировки записей будет или меньше, или столько же(если нет записей которые можно сгруппировать). Помимо функции Сумма, доступны и другие функции для группировки, полный список смотрите в конструкторе. Когда вы применяете группировку, поле должно либо быть группируемым(быть в верхней правой части на закладке "Группировка"), либо к нему должна применяться какая то агрегатная функция(поле должно быть в нижней части на закладке "Группировка"). При использовании других функций("количество различных" например) суммируемое поле, может быть не числовым. Пример запроса с группировкой

    Условие и параметры в запросе

    На результат выборки запроса, можно накладывать условия, которые могут быть достаточно разнообразными, в качестве условия могут выступать строковые или числовые константы, значения перечислений, предопределенные элементы справочников, подзапросы или любое значение переданное в параметре запроса. Для того, что бы указать, что выражение является параметром, перед ним указывают символ "&". За указание условия в запросе, отвечает секция "ГДЕ"

    Передать параметр в запрос, можно следующим образом:

    Псевдонимы

    В случаях когда результат запроса может быть сразу выгружен в табличную часть документа, или в набор записей регистра, необходимо, что бы выходные поля запроса имели имена идентичные именам принимающей таблицы. Для того что бы присвоить полю свое имя его можно указать на закладке Объединения/Псевдонимы или в тексте запроса в секции указания списка полей указать ключевое слово КАК НовоеИмяВыходногоПоля напротив нужно поля. Поле для которого указан псевдоним, подсвечивается в конструкторе жирным шрифтом.

    Объединения

    Когда необходимо выбрать данные из двух никак не связанных таблиц, или получить выборку данных не связывая между собой таблицы, необходимо использовать объединение, оно соединяет таблицы горизонтально, то есть вы получаете не новые поля, а новые строки . Для этого в конструкторе на закладке Объединения/Псевдонимы необходимо добавить запрос и установить сопоставление полей с первым запросом. Или в тексте запроса добавить конструкцию "Объединить ВСЕ" после которой следует написать запрос, данные которого будут использоваться для объединения и проставить поля в том порядке в котором они следуют в первом запросе. Опция ВСЕ у конструкции ОБЪЕДИНИТЬ указывает на то, что в выборку попадут абсолютно все записи результата запроса, если убрать это слово то в результате второго запроса мы увидим, только те записи, которых нет в результате выборки первого запроса.

    Соединения

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

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

    Вложенные запросы

    Вложенные запросы это "подзапрос" в запросе, который добавляет еще одну таблицу в источники данных запроса, содержимое которой будет определяться его результатом. Вложенные запросы бывают полезны в основном при создании сложных связей, условий или когда нужно добавить уровень абстракции к определенному набору данных их можно обернуть вложенным запросом, область применения у вложенных запросов достаточно широкая. Однако при их использовании следует помнить о производительности. Создать вложенный запрос можно с помощью кнопки на закладке "Таблицы и поля". После нажатия на эту кнопку, откроется еще одно окно построителя запросов. Где можно будет построить еще один запрос. Пример запроса, сам по себе натянутый, так как кроме вложенного запроса, в нем ничего нет, но как таковой вложенный запрос демонстрирует достаточно хорошо.

    Сортировка

    Если необходимо упорядочить результаты запроса, такое поведение, можно настроить на закладке конструктора Порядок , на этой закладке, можно перечислить список полей по которым нужно производить сортировку или можно в тексте запроса указать конструкцию "УПОРЯДОЧИТЬ ПО" и перечислить поля по которым необходимо производить сортировку. Также доступно выражение "АВТОУПОРЯДОЧИВАНИЕ", с помощью которого для ссылочных типов данных происходит сортировка по представлению ссылки.

    Тип данных NULL

    NULL тип данных который можно получить только в одном месте: в запросе, этот тип данных получается, когда при соединении таблиц левым, правым или полным соединением, нет данных удовлетворяющих условию соединения. Любая проверка значения с этим типом всегда возвращает Ложь. Любая операция с этим полем возвращает NULL. Для обработки этого типа существуют следующие операторы:

    Использование функций

    Язык запросов обладает ограниченным набором функций, для обработки данных, так как считается, что запросы это средство для получения данных, а не для их обработки. Но необходимый минимум, все таки имеется. Например нет возможность получить дату без времени, но есть возможность привести дату к началу дня, месяца, года, с помощью функции, начало периода. Условный оператор тоже присутствует в виде функции "Выбор". Функция "Значение" позволяет в запросе получать значения перечислений, и к некоторым значениям системных перечислений(например вид движения регистра) или значений предопределенных значений справочника. Описание функций языка запросов, отсутствует во встроенном синтаксис помощнике, но его можно найти в справке которая находится в меню «Справка» или по кнопке F1. Там нужно открыть содержание справки (можно сразу его открывать из этого же меню, или по shift F1) и выбрать Встроенный язык – Работа с запросами – Синтаксис языка запросов – Ключевые слова и функции – Функции.

    Получение данных из табличных частей документов

    Если необходимо получить данные из табличной части какого либо документа, следует обращаться напрямую к табличной части документа. Если рассматривать конструктор запросов, то вот так делать неправильно:

    А вот так будет правильно:

    Разумеется в любом случае нужно наложить условие на поле "Ссылка" что бы не получить в результате запроса табличные части всех существующих в системе документов.

    1С 8.3 Соединение в запросе — Программист 1С Минск. Автоматизация бизнеса.

    ✔ Внутреннее соединение двух таблиц

    &НаСервере
    Процедура ВнутреннееСоединениеДвухТаблиц ()

    Запрос = Новый Запрос ( «ВЫБРАТЬ
    | Металлы.Наименование КАК НаименованиеИзТаблицы1,
    | ПрайсЛист.Наименование КАК НаименованиеИзТаблицы2,
    | ПрайсЛист.Цена КАК ЦенаИзТаблицы2
    |ИЗ
    | Справочник.Металлы КАК Металлы
    | ВНУТРЕННЕЕ СОЕДИНЕНИЕ
    | Справочник.ПрайсЛист КАК ПрайсЛист
    | ПО
    | Металлы.Наименование = ПрайсЛист.Наименование» );

    РезультатЗапроса = Запрос . Выполнить (); Записи = РезультатЗапроса . Выбрать ();
    Пока Записи . Следующий () Цикл
    // Обход результата запроса по каждой записи в полученной выборке
    КонецЦикла;

    Соединение таблиц в запросе

    Язык запросов 1С позволяет сделать соединения двух и более таблиц. Под соединением понимается состыковка двух таблиц по ключевым полям.

    Всего 4 вида соединений

    • Полное соединение — в результате получается одна таблица, содержащая все выбранные колонки, обычно число строк равняется количеству совпадающих по ключам строк плюс все несовпадающие.
    • Левое соединение — на выходе будет выбранные поля обеих таблиц (полностью первой и совпадающие по ключам соединения второй), количество строк всегда больше или равно количеству в первой таблице (условие соединения может вызывать дубли, если в правой таблице поля соединения дублируются))
    • Правое соединение — обратное левому (главная таблица вторая).
    • Внутреннее соединение — количество строк такой таблице равно количеству совпадающих по условию объединения строк.

    Возможно выборка всех полей объединяемых таблиц (обращение к ним по псевдониму), но если соединение не внутреннее, то в отсутствующем поле будет значение NULL, поэтому следует рассматривать его особым образом или подменять значение через функцию ЕстьNULL().

    Условием соединения может быть и простое условие «ИСТИНА», которое соединит таблицы с значительным увеличением количества строк (каждая строка соединится с каждой строкой второй таблицы).

    [qu_note note_color=»#f7ebe6″]Такие запросы на больших источниках может вызвать нехватку памяти, либо длительно выполнятся, вплоть до «зависания».[/qu_note]

    Различные виды объединений используются для своих своих задач и целей:

    Левое, когда требуется к одной основной таблице добавить какие-то свойства из другой. Например к списку контрагентов добавить задолженность, банковские реквизиты, фио руководителей.
    При формировании такого запроса, следует добиться отсутствия в правой таблице дублей строк, этому способствует использование временных таблиц или вложенных. В противном случае в левой таблице появятся дубли контрагентов, что будет мешать верному восприятию.

    Если задвоения будут в динамическом списке, это может вызвать ошибку дублирования ключевого поля.

    Внутреннее соединение служит для максимально ограничения выборки, например: получить контрагентов у которых были реализации в выбранный период.

    В управлении торговлей для решения такой задачи соединение не так уж важно, достаточного было бы обратится к регистру «Продажи», а вот в «Бухгалтерии предприятия» соединение будет более верным решением: ведь мы не знаем заранее какой счет учета используется для продажи, могут быть созданные пользователем субсчета (это даст более короткое решение, но все зависит от ситуации — не обязательно же оно должно быть универсальным).

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

    Требование к таким таблицам:

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

    Как задать соединение в конструкторе запроса:

    Шаг 1: выберите необходимые таблицы, которые возможно соединить

    • Это производится на вкладке таблицы конструктора запроса.
    • Далее можно сразу выбрать нужные поля.

    Шаг 2: Переходим на вкладку «Связи»

    • Для простых таблиц, где явно определяются связи, система их объединит самостоятельно
    • В данном случае левое соединение
    • Чтобы получить внутреннее: снимаются оба флажка «Все» — тогда в таблицу попадут только контрагенты у которых есть контактные лица
    • Чтобы получить полное: устанавливаются оба флажка
    • Если требуется соединение по двум условиям добавляется еще одна строка связи.

    Вид соединения задается соответствующим словом перед «СОЕДИНЕНИЕ», остальной синтаксис идентичен. Правое не рассматриваем, так как конструктор запроса автоматически поменяет таблицы местами и сделает левое соединение.

    Пример текста запроса «Внутреннее соединение»:

    Пример левого соединения

    Пример «полного соединения»

    На что следует обратить внимание:

    • Как уже было сказано на пустые значения при левом или полном соединении.
    • С осторожностью используйте полные соединения и срезы последних из регистров, это может сильно замедлить выборку.
    • При использовании конструктора обращайте внимание на соединяемые таблицы иногда он может подставить в левую таблицу не ожидаемое вами, если это упустить вначале придется затем исправлять руками или через правое (одна секунда внимания сбережет время в дальнейшем).
    • Если вы выберете 2 таблицы, но не укажите связи, то получится неявное полное соединение (таблицы будут через «запятую»). Пример:

    Реклама – это не выигрывание призов Эффи и Золотых Львов. Это зарабатывание денег рекламодателям.

    — Серджио Займан

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *