Конвертация 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:
Аналогом 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; |
Результат:
Вы можете проверить и убедиться, что запросы эквивалентны и возвращают один и тот же набор результатов.
Аналогом 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; |
Как видите, это решение полностью повторяет логику OUTER APPLY.
Это решение автоматически выполняется программным обеспечением Конвертум Мастер. Узнать больше о других возможностях инструмента конвертации, а также запросить лицензию вы можете на нашем сайте.
Если у вас есть другие вопросы, пожалуйста, свяжитесь с нами: support@convertum.ru