【发布时间】:2017-06-29 09:21:43
【问题描述】:
我有一个 SQLite 表,其中一列包含一个 JSON 数组,其中包含 0 个或多个值。像这样的:
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 的问题,所以我也很高兴听到是否有更好的方法......
【问题讨论】:
标签: sqlite recursion common-table-expression