如何在SELECT语句中提取Struct的部分字段?
查询Struct类型字段的部分字段方法
如果你的Customers表中customer是STRUCT类型字段(包含id、identifier子字段),操作分为两种场景,不同数据库的语法略有差异:
1. 提取单个子字段
这种场景不需要用STRUCT()函数,直接通过点语法访问子字段即可:
BigQuery 示例
SELECT customer.id AS customer_id FROM Customers
如果子字段名包含特殊字符或大小写敏感,用反引号包裹:
SELECT customer.`Id` AS customer_id FROM Customers
PostgreSQL 示例
PostgreSQL中Struct对应自定义类型或RECORD,提取子字段同样用点语法:
SELECT customer.id AS customer_id FROM Customers;
2. 构造仅包含部分子字段的新Struct对象
如果需要返回一个新的Struct(只保留id这类部分子字段),才需要用到STRUCT()(或对应数据库的构造函数):
BigQuery 示例
-- 构造仅含id的新Struct,自定义字段名 SELECT STRUCT(customer.id AS id) AS partial_customer FROM Customers -- 简化写法(字段名沿用原Struct的子字段名) SELECT STRUCT(customer.id) AS partial_customer FROM Customers
PostgreSQL 示例
假设你有自定义类型customer_type,用ROW()构造并转换为对应类型:
-- 构造仅含id的新Struct对象 SELECT ROW(customer.id)::customer_type AS partial_customer FROM Customers;
常见排查点
- 确认
customer字段确实是Struct类型,而非JSON类型(JSON类型需要用JSON_EXTRACT等专门函数处理) - 检查字段名大小写:部分数据库(如BigQuery)严格区分大小写,子字段名需与定义完全匹配
内容的提问来源于stack exchange,提问作者Caitlin Reilly
相关产品推荐
相关产品推荐

