Skip to the content.

SELECT

Коррелированные подзапросы

Коррелированные подзапросы реализованы DaJet Script согласно стандартному SQL. Если коротко, то это запросы, которые могут ссылаться на результаты своего родительского запроса. Можно сказать, что коррелированные подзапросы - это встроенные в основной запрос функции (inline functions), использующие замыкание (closure) на родительскую область видимости данных. Обычно такие функции возвращают скалярное значение, однако, могут возвращать и массивы скалярных значений, например, при использовании в предложении WHERE такими функциями сравнения, как IN или EXISTS.

Более подробно можно ознакомиться с особенностями и использованием коррелированных подзапросов в документации по стандартному SQL соответствующей СУБД, например, Microsoft SQL Server или PostgreSQL.

В ниже следующем примере обратите внимание на то, каким образом подзапрос получает значение реквизита Наименование из таблицы Справочник.Номенклатура для поля выборки Товар в предложении SELECT основного запроса, ссылаясь на поле Номенклатура таблицы РегистрСведений.ЦеныНоменклатуры через её псевдоним Цены:

WHERE Ссылка = Цены.Номенклатура -- Ссылка на результат родительского запроса

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

DECLARE @table array
DECLARE @КодТовара string = '00000001'

USE 'mssql://server/database'

   SELECT Период
        , Товар = (SELECT Наименование
                     FROM Справочник.Номенклатура
                    WHERE Ссылка = Цены.Номенклатура)
        , Цена
     INTO @table
     FROM РегистрСведений.ЦеныНоменклатуры AS Цены
    WHERE Номенклатура IN (SELECT Ссылка
                             FROM Справочник.Номенклатура
                            WHERE Код = @КодТовара)
    ORDER BY Период ASC
END

IF @table = NULL
THEN RETURN 'Нет данных'
ELSE RETURN @table
END

Результат запроса в DaJet Studio

Период Товар Цена
01/01/2024 00:00:00 Товар 1 1.00
01/02/2024 00:00:00 Товар 1 1.23
01/03/2024 00:00:00 Товар 1 3.21

Наверх