我想修改以下查询以从 JSON 数组中的对象中提取 value 属性并输出如下表:
“值1”,“值2”
但是我的查询当前输出数组中每个条目的整个 JSON 对象。
我想这样做,以便我可以将其用作 IN 表达式的子查询。
SELECT valueJson
FROM (
(
SELECT JSON_EXTRACT_ARRAY(values) AS valueJson
FROM (
SELECT JSON_QUERY(tag, '$.values') AS values
FROM UNNEST(JSON_EXTRACT_ARRAY(
JSON
'[{"active":true,"key":"key1",
"values":[{"active":true,"value":"value1"}]},
{"active":true,"key":"key2",
"values":[{"active":true,"value":"value2"}]}]')) AS tag
)
)
)
谢谢!
我想出了这个,但很高兴接受另一个带有解释或改进的答案:
SELECT
JSON_EXTRACT_SCALAR(valueJson, '$.value') AS value
FROM (
SELECT valueJson
FROM (
SELECT JSON_QUERY(tag, '$.values') AS valuesArray
FROM UNNEST(JSON_EXTRACT_ARRAY(
JSON '[{"active":true,"key":"key1","values":[{"active":true,"value":"values1"}]},{"active":true,"key":"key2","values":[{"active":true,"value":"value2"},{"active":true,"value":"value3"}]}]' )) AS tag )
JOIN UNNEST(JSON_EXTRACT_ARRAY(valuesArray)) AS valueJson )
WHERE JSON_EXTRACT_SCALAR(valueJson, '$.value') IS NOT NULL