PostgreSQL如何将数组列元素拆分生成单独行?
PostgreSQL:拆分数组列为多行并保留原数据
这事儿在PostgreSQL里用unnest()函数就能直接搞定,完全匹配你要的结果!
核心思路就是用unnest()把数组列的每个元素拆成单独的行,同时保留原行的所有其他字段。直接上SQL:
SELECT a, b, unnest(b) AS c FROM your_table;
验证一下效果
先创建测试表并插入你给的数据:
CREATE TABLE your_table (a varchar(3), b text[]); INSERT INTO your_table VALUES ('001', '{x,y,z}'), ('002', '{x,s}');
执行上面的查询后,输出结果就是你想要的:
a | b | c
-----+----------+---
001 | {x,y,z} | x
001 | {x,y,z} | y
001 | {x,y,z} | z
002 | {x,s} | x
002 | {x,s} | s
补充说明
unnest()是PostgreSQL专门用来展开数组的内置函数,它会把数组中的每个元素对应生成一行,同时自动关联原行的a和完整的b数组,哪怕a字段不唯一也能正确匹配。- 这个写法在PostgreSQL 9.3及以上版本都能正常工作,性能也很可靠,适合处理这类数组拆分需求。
内容的提问来源于stack exchange,提问作者Dbi
相关产品推荐
相关产品推荐

