Postgres使用UNNEST处理Text[]列时跳过null值行该如何保留?
解决方法
你当前使用的逗号连接本质是隐式内连接,当reloptions字段为null或空数组时,UNNEST函数无返回结果,对应的原表行就会被过滤。要保留无对应reloption的原表行,改用左连接即可实现需求。
PostgreSQL 支持对集合返回函数直接使用左连接,正确查询语句如下:
SELECT t.name, u.reloption FROM your_table t LEFT JOIN UNNEST(t.reloptions) AS u(reloption) ON true;
如果使用的是旧版本 PostgreSQL 或其他兼容 PostgreSQL 的数据库,要求显式标注横向连接,可以补全LATERAL关键字:
SELECT t.name, u.reloption FROM your_table t LEFT JOIN LATERAL UNNEST(t.reloptions) AS u(reloption) ON true;
原理说明
- 左连接会完整保留左表(你的原始业务表)的所有行
- 当
UNNEST执行后无返回结果时,对应行的reloption字段会自动填充为null,完全匹配你预期的输出结果
内容的提问来源于stack exchange,提问作者Jacob Alley
相关产品推荐
相关产品推荐

