我有一个SQLite表,其中一列包含一个包含0或更多值的JSON数组。像这样:
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解决此问题(或类似问题)吗?
当然,我的目标是在有或没有CTE的情况下解决问题所以我也很高兴听到是否有更好的方法......
答案 0 :(得分:1)
您不需要递归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;