Конвертация OUTER APPLY и CROSS APPLY из Microsoft SQL Server в PostgreSQL

Оператор CROSS APPLY возвращает строки из левого табличного выражения, которые имеют соответствие с правым табличным выражением. Иными словами, правое табличное выражение возвращает строки лишь тогда, когда есть совпадение с левым табличным выражением.

Оператор OUTER APPLY, напротив, возвращает все строки из левого табличного выражения, независимо от того, есть ли совпадение с правым табличным выражением. Если соответствия нет, то в столбцах правого табличного выражения будут содержаться значения NULL.

PostgreSQL не поддерживает OUTER APPLY и CROSS APPLY. Поэтому OUTER APPLY будет преобразован в LEFT JOIN LATERAL, а CROSS APPLY — в CROSS JOIN LATERAL.

Давайте рассмотрим следующий пример:
У нас есть две таблицы с данными — таблица Department и таблица Employee: pg_apply_conv_1 Аналогом CROSS APPLY в PostgreSQL является CROSS JOIN LATERAL.

SQL Server PostgreSQL
SELECT * FROM Department D CROSS APPLY (SELECT * FROM Employee E WHERE E.DepartmentID = D.DepartmentID) A; SELECT * FROM Department D CROSS JOIN LATERAL (SELECT * FROM Employee E WHERE E.DepartmentID = D.DepartmentID) A;

Результат: pg_apply_conv_2 Вы можете проверить и убедиться, что запросы эквивалентны и возвращают один и тот же набор результатов.

Аналогом OUTER APPLY в PostgreSQL является LEFT JOIN LATERAL.

SQL Server PostgreSQL
SELECT * FROM Department D OUTER APPLY (SELECT * FROM Employee E WHERE E.DepartmentID = D.DepartmentID) A; SELECT * FROM Department D LEFT JOIN LATERAL (SELECT * FROM Employee E WHERE E.DepartmentID = D.DepartmentID) A on TRUE;

Результат: pg_apply_conv_3

Как видите, это решение полностью повторяет логику OUTER APPLY.

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


Если у вас есть другие вопросы, пожалуйста, свяжитесь с нами: support@convertum.ru