Вставить значения из результата CTE - PullRequest
0 голосов
/ 25 июня 2018

У меня есть таблица «SchoolYearStartEnd»

CREATE TABLE SchoolYearStartEnd (
    id               INT  PRIMARY KEY
                          UNIQUE,
    StartDate    DATE,
    EndDate DATE
);

и вторая таблица «SchoolYearsTeachingDays»

CREATE TABLE SchoolYearsTeachingDays (
    aDate DATE PRIMARY KEY
                UNIQUE
);

, которую я хочу заполнить датами из CTE, например:

WITH RECURSIVE dates(x) AS (
 SELECT (SELECT StartDate FROM SchoolYearStartEnd)
  UNION ALL
 SELECT DATE(x, '+1 DAYS') FROM dates WHERE x < (SELECT EndDate FROM SchoolYearStartEnd)
 )
 SELECT * FROM dates WHERE CAST(STRFTIME('%w',x) AS INTEGER) > 0
;

Я пытался использовать этот код здесь:

INSERT INTO SchoolYearsTeachingDays (aDate) VALUES (
  WITH RECURSIVE dates(x) AS (
   SELECT (SELECT StartDate FROM SchoolYearStartEnd)
    UNION ALL
   SELECT DATE(x, '+1 DAYS') FROM dates WHERE x < (SELECT EndDate FROM SchoolYearStartEnd)
   )
  SELECT * FROM dates WHERE CAST(STRFTIME('%w',x) AS INTEGER) > 0 -- To exclude Sundays.
 ;
);

, но безуспешно.Я получаю эти ошибки: Ошибка: рядом с "RECURSIVE": синтаксическая ошибка sqlite> Ошибка: рядом с ")": синтаксическая ошибка

Так чего мне здесь не хватает?

Best, Pal

1 Ответ

0 голосов
/ 26 июня 2018

Когда вы вставляете из запроса SELECT, вы не должны использовать VALUES :

INSERT INTO SchoolYearsTeachingDays (aDate)
WITH RECURSIVE dates(x) AS (...)
SELECT * FROM dates ...;
...