Ваше решение в основном нормально, но вы должны использовать union all
:
select 1 union all select 2 union all select 3
union
накладные расходы на удаление дубликатов, и вы не хотите этого делать.
Альтернативным решением будет использование таблицы numbers
, если у вас есть одна удобная.
Другим решением было бы взять любой достаточно большой стол и использовать:
select (@rn := @rn + 1) as n
from t cross join
(select @rn := 0) params
limit 3;
Это удобно, если вы хотите расширить до больших чисел.