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