2017-09-06 9 views
1

私は、同じWITHステートメント内に、通常のテーブル式と再帰式の両方を持つことを試みています。再帰的なものとして、通常のテーブル式を最初に持っていたい普通のものに依存します。私がこれをしようとしているとき、それはちょうどうまくいきません。再帰的なテーブル式を最初に動作させることができます。SQLite:WITH句内に普通のテーブル式の後に再帰式テーブル式を置くことはできますか?

SQLFiddleで、次の場合は、問題を示していますhttp://sqlfiddle.com/#!5/b5362/3063/0

次のコードは正常に動作します:

WITH RECURSIVE dates(x) AS ( 
      SELECT datetime('2015-01-01') 
       UNION ALL 
     SELECT datetime(x, '+1 MONTHS') FROM dates WHERE x<'2016-01-01' 
    ) 
, 
testi AS (select * from supportContacts 
order by id desc) 
    SELECT * 
    FROM dates; 

しかし、私は、再帰table文で始まるとき、それは動作しません、次のコード、すなわち、動作しません。

WITH testi AS (select * from supportContacts 
    order by id desc) 
, 
RECURSIVE dates(x) AS ( 
      SELECT datetime('2015-01-01') 
       UNION ALL 
      SELECT datetime(x, '+1 MONTHS') FROM dates WHERE x<'2016-01-01' 
    ) 
SELECT * 
FROM dates; 

最初、私はそれを行うだろうか、その場合には、再帰的なテーブルステートメントを持つことが可能であるならば、誰かが私に言うことができる場合、私は非常に幸せになります。あなたが単語RECURSIVEを使用している場合//アンリ

答えて

0

敬具は、それが直接WITH後、一度だけ来なければなりません。

SQL標準によれば、以下のCTE どの再帰的であるかもしれないことを意味し(ただし、いずれかが実際にある場合には必須です)。

(だから、データベースが任意の特定のCTEは再帰的であるかどうかを自身で調べることがある。このため、SQLiteの(および他の多くのDB)この言葉は完全にオプションにする。)

+0

はありがとうございました!あなたの答えに続いて、私はRECURSIVEという言葉を削除し、今まで働かなかったコードを削除しました。 –

関連する問題