Ответ 1
Было бы плохой практикой, если бы все операции на основе набора были а) реализованы и б) эффективно во всех двигателях.
Однако для некоторых задач (например, для эмуляции LAG
и LEAD
в SQL Server
, длинные цепочки вставки при каскадной автогенерации id
- это несколько таблиц и т.д.), временные таблицы или переменные таблицы являются хорошим решением.
Следует отметить, что временные таблицы очень часто создаются и удаляются самим движком для операций с using temporary
в MySQL
, spool
в SQL Server
и т.д.
Поэтому каждый раз, когда вы создаете временную таблицу, задайте себе вопрос:
- Создать временную таблицу, потому что я не знаю способ, основанный на наборе, или потому, что я знаю метод на основе набора, но сервер (или оптимизатор) не работает?
Если ответ "Я знаю, но оптимизатор не работает", создайте таблицу. Оптимизатор будет делать то же самое, если это возможно.