0

我有一个表(名为patrons),其中包含json_patron_varfieldsJSON 数据的列(名为 )——一个看起来像这样的对象数组:

[
    {
    "display_order": 1,
    "field_content": "example 1",
    "name": "Note",
    "occ_num": 0,
    "varfield_type_code": "x"
    },
    {
    "display_order": 2,
    "field_content": "example 2",
    "name": "Note",
    "occ_num": 1,
    "varfield_type_code": "x"
    },
    {
    "display_order": 3,
    "field_content": "some field we do not want",
    "occ_num": 0,
    "varfield_type_code": "z"
    }
]

我想要做的是定位包含命名键varfield_type_code和值的对象x,我已经能够使用以下查询进行操作:

SELECT
patrons.patron_record_id,
json_extract(patrons.json_patron_varfields, json_tree.path)
FROM
patrons,
json_tree(patrons.json_patron_varfields)
WHERE
json_tree.key = 'varfield_type_code'
AND json_tree.value = 'x'

field_content我的问题是......我如何从我正在提取的对象中提取(甚至可能过滤)键的值?

我正在努力解决如何做到这一点的语法......我在想它可以像使用一样简单,json_extract(patrons.json_patron_varfields, json_tree.path."field_content")但这似乎不正确..

4

1 回答 1

1

您可以 concat 构建字符串

json_tree.path || '.field_content'

使用您给出的结构 - 您也可以使用它json_each()来代替json_tree()它可以简化事情。

提炼:

SELECT
patrons.patron_record_id,
json_extract(value, '$.field_content')
FROM
patrons, 
json_each(patrons.json_patron_varfields)
WHERE json_extract(value, '$.varfield_type_code') = 'x'

筛选:

SELECT
patrons.patron_record_id,
value
FROM
patrons, 
json_each(patrons.json_patron_varfields)
WHERE json_extract(value, '$.varfield_type_code') = 'x'
AND   json_extract(value, '$.field_content') = 'example 2'
于 2022-01-18T02:49:47.420 回答