sql >> Base de Datos >  >> RDS >> Mysql

La tabla CTE recursiva de MySQL no existe

La estructura de su CTE recursivo está desactivada, y la mitad superior de la unión debe ser un caso base semilla. Luego, la parte recursiva debe agregar un día al valor entrante anterior:

WITH RECURSIVE cte (n, dt) AS (
    SELECT 1, '2019-09-20'
    UNION ALL
    SELECT n + 1, TIMESTAMPADD(DAY, n, '2019-09-20') FROM cte WHERE n <= 5
)

SELECT * FROM cte;

Demostración

Cabe destacar que usamos TIMESTAMPADD() aquí para solucionar el problema del INTERVAL expresión, que en realidad no puede tomar una variable.

Si desea utilizar este enfoque para generar una serie de fechas que coincidan con los valores desde y hasta en su tabla, entonces puede probar una unión:

SELECT
    t1.dt
FROM cte t1
INNER JOIN yourTable t2
    ON t1.dt BETWEEN t2.from_date AND t2.to_date;

Cuando se usa de esta manera, el CTE recursivo actúa como un calendario mesa.