尝试取消嵌套 Text[] 类型的列正在跳过为空的列 - Postgres

Posted

技术标签:

【中文标题】尝试取消嵌套 Text[] 类型的列正在跳过为空的列 - Postgres【英文标题】:Trying to unnest a column of type Text[] is skipping the columns that are null - Postgres 【发布时间】:2021-08-22 16:25:30 【问题描述】:

想象一个如下所示的表格:

    name | reloptions
-----------------------
    testname | val1, val2
   nullSample | null

如果我运行这样的查询:

SELECT * 
FROM table, UNNEST(reloptions) AS reloption

我只得到:

name | reloption
------------------
testname | val1
testname | val2

我需要结果集仍然包含具有空值的行:

     name | reloption
    ------------------
    testname | val1
    testname | val2
    nullSample | null

提前感谢任何帮助

【问题讨论】:

【参考方案1】:

您可以使用coalesce()NULL 值替换为具有一个元素NULL 的数组。

SELECT *
       FROM elbat AS t
            CROSS JOIN LATERAL unnest(coalesce(t.reloptions, 'null'::text[])) AS ro
                                                                                   (ro);

db<>fiddle

【讨论】:

【参考方案2】:

使用left join

SELECT * 
FROM table t LEFT JOIN LATERAL
     UNNEST(t.reloptions) AS reloption
     ON 1=1;

【讨论】:

以上是关于尝试取消嵌套 Text[] 类型的列正在跳过为空的列 - Postgres的主要内容,如果未能解决你的问题,请参考以下文章

Dokka - 跳过为默认的 android 包生成 javadoc

在 PSQL 中为可为空的列添加唯一约束

如何使用 System.Text.Json 处理可为空的引用类型?

如何在 Amazon Redshift 的列中取消嵌套/展开/展平逗号分隔值?

如何使用可为空的列连接 MySQL 表?

在 Entity Framework 6 查询中取消引用可能为空的引用