SQL如何将text[]数组列展开为单个元素行并合并所有结果
SQL数组列逐行扁平化实现方案
针对数组类型列展开合并为单结果集的需求,直接通过UNNEST函数配合表查询即可实现,数据库会自动完成逐行的数组展开映射,无需手动逐行处理。
基础实现(仅返回展开后的数组元素)
针对你给出的测试表结构,直接运行以下查询即可得到预期的5行结果:
SELECT UNNEST(col2) AS flattened_text FROM arrs -- 自动过滤数组列为NULL的记录 WHERE col2 IS NOT NULL;
运行返回结果依次为a/b/c/d/e,完全匹配预期。针对你举例的3条含NULL数组的测试数据,该语句会自动跳过NULL数组行,最终返回1、2、3、1、4、5共6条结果。
关联原表字段的扩展写法
如果需要保留展开元素和原表记录的关联关系(比如同步获取原表的col1值),可以用LATERAL交叉连接的写法,逻辑更清晰:
SELECT t.col1, arr_item AS flattened_text FROM arrs t CROSS JOIN LATERAL UNNEST(t.col2) AS arr_item WHERE t.col2 IS NOT NULL;
注意说明
- 该写法兼容PostgreSQL、BigQuery等支持标准数组类型与
UNNEST函数的SQL引擎,你之前了解到的BigQueryUNNEST逐行展开逻辑和上述写法完全一致,不需要额外写循环做逐行映射,数据库引擎会自动完成逐行展开的计算。 - 你提到的SQLite测试环境本身不支持原生
text[]数组类型,上述原生数组解法无法在SQLite中直接运行,如果是SQLite环境需要先对字符串格式存储的数组做自定义拆分处理。
内容的提问来源于stack exchange,提问作者Andy Delworth
相关产品推荐
相关产品推荐

