展平表中可能为 NULL 或 presto 为空的数组

Sab*_*aba 2 sql arrays flatten presto trino

我在 sql 查询中使用了下表。

在此输入图像描述

我想把它变成下面的形状

在此输入图像描述

我该怎么做呢?我使用了 unnest 和 cross join 。由于数组为空,我没有看到整个视图。

Mar*_*rso 5

UNNEST您可以在 a 的上下文中使用LEFT JOIN

WITH t(v) AS (VALUES 
    ARRAY[1,2],
    NULL,
    ARRAY[3,4],
    ARRAY[]
)
SELECT e
FROM t LEFT JOIN UNNEST(t.v) AS u(e) ON true
Run Code Online (Sandbox Code Playgroud)

这是在Trino 319以前称为 Presto SQL)中添加的

如果您使用的不是最新版本,可以用以下内容替换:

...
FROM t CROSS JOIN UNNEST(if(t.v IS NULL OR cardinality(t.v) = 0, ARRAY[NULL], t.v)) AS u(e)
Run Code Online (Sandbox Code Playgroud)