Generar una secuencia de números enteros en MySQL

Resuelto BCS asked hace 16 años • 19 respuestas

Necesito hacer una unión con una tabla/conjunto de resultados/lo que sea que tenga números enteros ninclusive m. ¿Existe una forma trivial de conseguirlo sin simplemente construir la mesa?

(Por cierto, ¿cómo se llamaría ese tipo de construcción, una " Metaconsulta "?)

m-nestá limitado a algo razonable (< 1000's)

BCS avatar Nov 20 '08 13:11 BCS
Aceptado

Encontré esta solución en la web.

SET @row := 0;
SELECT @row := @row + 1 as row, t.*
FROM some_table t, (SELECT @row := 0) r

Consulta única, rápida y hace exactamente lo que quería: ahora puedo "numerar" las "selecciones" encontradas en una consulta compleja con números únicos que comienzan en 1 y aumentan una vez por cada fila del resultado.

Creo que esto también funcionará para el problema mencionado anteriormente: ajustar el valor inicial inicial @rowy agregar una cláusula de límite para establecer el máximo.

Por cierto: creo que la "r" no es realmente necesaria.

ddsp

David Poor avatar May 24 '2009 16:05 David Poor

Lo siguiente devolverá 1..10000 y no es tan lento

SELECT @row := @row + 1 AS row FROM 
(select 0 union all select 1 union all select 2 union all select 3 union all select 4 union all select 5 union all select 6 union all select 7 union all select 8 union all select 9) t,
(select 0 union all select 1 union all select 2 union all select 3 union all select 4 union all select 5 union all select 6 union all select 7 union all select 8 union all select 9) t2, 
(select 0 union all select 1 union all select 2 union all select 3 union all select 4 union all select 5 union all select 6 union all select 7 union all select 8 union all select 9) t3, 
(select 0 union all select 1 union all select 2 union all select 3 union all select 4 union all select 5 union all select 6 union all select 7 union all select 8 union all select 9) t4, 
(SELECT @row:=0) numbers;
Unreason avatar Apr 16 '2010 10:04 Unreason

Si está utilizando la bifurcación MariaDB de MySQL , el SEQUENCEmotor permite la generación directa de secuencias numéricas. Para ello, utiliza tablas virtuales (falsas) de una columna.

Por ejemplo, para generar la secuencia de números enteros del 1 al 1000, haga esto

     SELECT seq FROM seq_1_to_1000;

Del 0 al 11, haz esto.

     SELECT seq FROM seq_0_to_11;

Para obtener valores de FECHA consecutivos para una semana a partir de hoy, haga esto.

SELECT FROM_DAYS(seq + TO_DAYS(CURDATE)) dateseq FROM seq_0_to_6

Para una década de DATEvalores consecutivos que comiencen con '2010-01-01', haga esto.

SELECT FROM_DAYS(seq + TO_DAYS('2010-01-01')) dateseq
  FROM seq_0_to_3800
 WHERE FROM_DAYS(seq + TO_DAYS('2010-01-01')) < '2010-01-01' + INTERVAL 10 YEAR

Si no estás utilizando MariaDB, considéralo.

O. Jones avatar Jan 08 '2017 12:01 O. Jones

prueba esto... me funciona en la versión 8.0 de MySQL. Puede modificar la siguiente consulta de acuerdo con el rango requerido.

WITH recursive numbers AS (
    select 0 as Date
   union all
   select Date + 1
   from numbers
   where Date < 10)
select * from numbers;

y sí, sin crear una tabla como se menciona en tu publicación

Ajay Venkata Raju avatar Feb 14 '2019 10:02 Ajay Venkata Raju