【发布时间】:2021-08-15 22:13:46
【问题描述】:
我正在尝试使用输入表来实现输出表。输入表包含 id 和 name,其中 id 包含数值,name 包含 JSON 值。我可以通过使用 'LOOP'、'Cursor' 等编写过程查询来获得输出。但是我们如何在 Teradata 中使用 select 查询语句来实现这一点。
输入表
| S.No | Name |
|---|---|
| 1 | { "id": 4, "item" : ["Apple", "google", "IBM" ] } |
输出表
| Id | Index | Name |
|---|---|---|
| 4 | 0 | apple |
| 4 | 1 | |
| 4 | 2 | ibm |
查询
select * from json_table
(
on
(
select Name.jsonextractvalue("$.id.[*]) as memberid,
Name
from table_data
)
using rowexpr("$.name[*]"]
colexpr("")
) as A(member_id,index,name)
【问题讨论】:
-
您的示例不是很有效的 JSON,但显然只有一个键,其对应的值是字符串数组。您可以将数组分解或提取为字符串值(例如,使用 JSON_TABLE 或 JSON_EXTRACT),甚至只是将整个字段转换为字符串。然后将 STRTOK_SPLIT_TO_TABLE 或 REGEXP_SPLIT_TO_TABLE 应用于该结果以“迭代”,即分成多行。
-
我认为 json_table 至少不能与无效的 json 一起使用。至少你需要引用标识符 -
"id" : ["apple"... -
请用我试过的查询找到更新后的问题。