具有 unnest 的 PostgreSQL 查询不返回空值的结果行
Posted
技术标签:
【中文标题】具有 unnest 的 PostgreSQL 查询不返回空值的结果行【英文标题】:PostgreSQL query with unnest returns no result row for null values 【发布时间】:2021-02-02 16:28:22 【问题描述】:我正在尝试查询将列中逗号分隔值划分为不同记录的值,如果列有空值,我无法获取值,下面是示例
表名:测试
id,name,list
1,a, a1,b1
2,b, null
3,c,c1
使用的查询
select id,name,unnest(string_to_array(list,',')) from test;
结果:
1,a,a1
1,a,b1
3,c,c1
但我需要考虑空值并返回如下结果,我尝试使用合并但没有奏效,请帮助我解决方案
预期结果:
1,a,a1
1,a,b1
2,b,null
3,c,c1
【问题讨论】:
【参考方案1】:将unnest()
与外连接一起使用:
select t.id, t.name, u.element
from test t
left join unnest(string_to_array(t.list,',')) on true
order by t.id;
【讨论】:
我想知道我的 sql 查询中是否已经有一个外部 select id,name,unnest(string_to_array(list,',')) from test t INNER JOIN test1 t1 on t. id = t1.id ;其中 t1.id 是测试表 id 列的外键 @Karthikeyan:没有。 SELECT 列表中的unnest()
等效于cross join
,它类似于内部连接,因为如果 unnest() 为空,它不会返回行以上是关于具有 unnest 的 PostgreSQL 查询不返回空值的结果行的主要内容,如果未能解决你的问题,请参考以下文章
如何从 PostgreSQL 的子查询中选择包含值数组的列?
具有BigQuery的unnesting customDimensions