Mysql
 sql >> база данни >  >> RDS >> Mysql

MySQL рекурсивна CTE таблица не съществува

Структурата на вашия рекурсивен CTE е изключена и горната половина на съюза трябва да бъде начален базов случай. След това рекурсивната част трябва да добави един ден към предишната входяща стойност:

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;

Демо

Трябва да се отбележи, че използваме TIMESTAMPADD() тук, за да заобиколите проблема с INTERVAL израз, който всъщност не може да приеме променлива.

Ако искате да използвате този подход, за да генерирате поредица от дати, които съответстват на стойностите от и до във вашата таблица, тогава можете да опитате да се присъедините:

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

Когато се използва по този начин, рекурсивният CTE действа като календар таблица.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. JPA карта MySQL json тип, има изкривен низ

  2. SQLSTATE[23000]:Нарушение на ограничението за целостта:1217

  3. while цикъл и изход за присъединяване в mysql php

  4. mysql подобна заявка изключва числа

  5. jenkins се проваля при рестартиране на моя sql sudo:не присъства tty и не е посочена програма askpass Съжаляваме, опитайте отново.