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

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

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

MySQL не поддерживает OUTER APPLY и CROSS APPLY. Поэтому OUTER APPLY будет преобразован в LEFT JOIN LATERAL, а CROSS APPLY — в CROSS JOIN LATERAL. Обратите внимание, что ключевое слово LATERAL в MySQL поддерживается только с версии 8.

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

SQL Server MySQL
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 в MySQL является LEFT JOIN LATERAL.

SQL Server MySQL
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