2017-06-29 4 views
0

1つの列に0以上の値を含むJSON配列が含まれているSQLiteテーブルがあります。このような何か:JSON1を使用する再帰SQLite CTE json_each

id|values 
0 |[1,2,3] 
1 |[] 
2 |[2,3,4] 
3 |[2] 

私が何をしたいのかは、その列の配列内に含まれるすべての個別値のリストにこれを「展開」です。起動する

、Iは、行からの値のテーブルを抽出するJSON1拡張のjson_each関数を使用しています:

私はテーブル内の行を選択する(上記、2)IDを変化させることができる
SELECT 
    value 
FROM 
    json_each(
     (
     SELECT 
      values 
     FROM 
      my_table 
     WHERE 
      id == 2 
    ) 
) 

ここでは、これを再帰的なCTEにラップして、テーブル全体の各行に適用して結果を結合できるようにしようとしています。

WITH RECURSIVE result AS (
    SELECT null 
    UNION ALL 
    SELECT 
    value 
    FROM 
     json_each(
      (
      SELECT 
       values 
      FROM 
       my_table 
      WHERE 
       id == 2 
     ) 
    ) 
) 
SELECT * FROM result; 

を私はもともとID変数を作成し、最初の例と同様に(それをインクリメントすることを計画していた次のステップとして次のように私は(約)上記の結果を複製最初のステップとしてdocumentationしかし、それを働かせることができませんでした。

私はドキュメントの他の例を見てきましたが、それらは幾分複雑で、私はそれらをどのように見分けることができませんでした

誰かがこの問題を解決する方法の簡単な例を提供することはできますか問題)と再帰的なCTEの関係

もちろん

、私の目標は、より良い方法があるかどうかを聞いてとてもイムも幸せのCTEの有無にかかわらず、問題を解決することである...

答えて

0

あなたは、このための再帰CTEを必要としません。

は参加使い、複数のソース行に対して json_eachを呼び出すには:確かに

SELECT t1.id, t2.value 
FROM my_table AS t1 
JOIN json_each((SELECT "values" FROM my_table WHERE id = t1.id)) AS t2; 
+0

、はるかに優れたソリューションを提供します。どうもありがとう – gary