Generar una secuencia de números enteros en MySQL
Necesito hacer una unión con una tabla/conjunto de resultados/lo que sea que tenga números enteros n
inclusive 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-n
está limitado a algo razonable (< 1000's)
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 @row
y agregar una cláusula de límite para establecer el máximo.
Por cierto: creo que la "r" no es realmente necesaria.
ddsp
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;
Si está utilizando la bifurcación MariaDB de MySQL , el SEQUENCE
motor 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 DATE
valores 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.
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