2017-06-29 35 views
0

我有一個SQLite表,其中一列包含一個包含0或更多值的JSON數組。事情是這樣的:具有JSON1的遞歸SQLite CTE json_each

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

我想要做的是「展開」這個到包含該列的陣列內的所有不同值的列表。

首先,我使用的JSON1擴展的json_each函數從行提取的值表:

SELECT 
    value 
FROM 
    json_each(
     (
     SELECT 
      values 
     FROM 
      my_table 
     WHERE 
      id == 2 
    ) 
) 

在哪裏可以改變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?

當然,我的目標是具有或不具有熱膨脹係數要解決的問題因此Im也高興地聽到,如果有一個更好的辦法...

回答

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