查询列表中嵌套JSON数据:提取指定displayId对应的name值
解决SQL语法错误并提取目标数据
问题分析
你原SQL的错误在于:
- 使用
lateral view explode展开数组时,必须为展开后的单个元素指定别名,不能直接用原数组列registered访问子字段 - 过滤条件应该针对展开后的元素别名,而非原数组列
正确查询语句
select r.name from schoolList lateral view explode(registered) tmp as r where r.displayId = 16;
语句说明
lateral view explode(registered) tmp as r:将registered列的JSON数组展开为多行,每个数组元素被命名为r,tmp是该侧视图的别名(可省略,但保留更规范)where r.displayId = 16:过滤出展开后元素中displayId等于16的记录(如果你的displayId是字符串类型,再添加单引号'16')select r.name:提取符合条件的name字段,最终得到预期的"Dan"、"George"
内容的提问来源于stack exchange,提问作者Alyssa
相关产品推荐
相关产品推荐

