Mysql
 sql >> Database >  >> RDS >> Mysql

La tabella CTE ricorsiva MySQL non esiste

La struttura del tuo CTE ricorsivo è disattivata e la metà superiore dell'unione dovrebbe essere un caso di base seme. Quindi, la parte ricorsiva dovrebbe aggiungere un giorno al valore in entrata precedente:

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;

Dimostrazione

Da notare, utilizziamo TIMESTAMPADD() qui per aggirare il problema dell'INTERVAL espressione, che in realtà non può accettare una variabile.

Se desideri utilizzare questo approccio per generare una serie di date che corrispondano ai valori from e to nella tua tabella, puoi provare un join:

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

Se utilizzato in questo modo, il CTE ricorsivo agisce come un calendario tabella.