具有 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 查询不返回空值的结果行的主要内容,如果未能解决你的问题,请参考以下文章

具有多个数组的 unnest 的 Jooq 表示法

如何从 PostgreSQL 的子查询中选择包含值数组的列?

将 UNNEST 与 jOOQ 一起使用

具有BigQuery的unnesting customDimensions

在 PostgreSQL 中使用 UNNEST() 连接,以访问触发器的 OF 列名

PostgreSQL unnest,嵌套字段特定元素的 WHERE 子句