Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

A tabela CTE recursiva do MySQL não existe


A estrutura do seu CTE recursivo está desativada e a metade superior da união deve ser um caso base de semente. Então, a parte recursiva deve adicionar um dia ao valor de entrada 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;



Demonstração



É importante notar que usamos TIMESTAMPADD() aqui para contornar o problema do INTERVAL expressão, que não pode realmente receber uma variável.

Se você quiser usar essa abordagem para gerar uma série de datas que correspondam aos valores de e para em sua tabela, tente uma junção:
SELECT
    t1.dt
FROM cte t1
INNER JOIN yourTable t2
    ON t1.dt BETWEEN t2.from_date AND t2.to_date;

Quando usado desta forma, o CTE recursivo está agindo como um calendário tabela.