首页 > 解决方案 > SQL presto - 交叉连接未嵌套空值

问题描述

我有不同大小的数组,我希望数组中的每个值都位于不同的行中。为此,我使用了交叉连接 unnest。但是它正在工作,它正在删除空数组。

所以,当我这样做时,我的列 ID 具有不同的数组,有些是空值

select *
    from table 
    cross join unnest (t.id) as t(order_id)
    where length(order_id) = 5  or order_id is NULL
 

我只得到以下结果

ID order_id
23deo jfr32 6582w 23deo
23deo jfr32 6582w jfr32
23deo jfr32 6582w 6582w

而且我要

ID order_id
23deo jfr32 6582w 23deo
23deo jfr32 6582w jfr32
23deo jfr32 6582w 6582w
无效的 无效的

如果有人知道如何取消嵌套空值,将不胜感激。我一直在网上寻找,我看到我们可以包含一个 WITH ORDINALITY 子句,但我不知道它是如何工作的。

标签: sqlnullprestounnesttrino

解决方案


使用LEFT JOIN UNNEST而不是CROSS JOIN UNNEST. Presto 319中添加了功能

如果您有以前的版本,那么解决方法可以使用子查询LEFT JOIN

with exploded as (
select *
    from table t
    cross join unnest (t.id) as t(order_id)
)

select t.*, e.order_id 
  from table t
       left join exploded e on t.join_key=e.join_key

只需使用正确的加入密钥


推荐阅读