SQL presto - перекрестное соединение unnest null value

У меня есть массивы разных размеров, и я хочу, чтобы каждое значение в массиве находилось в отдельных строках. Для этого я использовал unnest перекрестного соединения. Однако он работает, он удаляет нулевой массив.

Итак, у меня есть идентификатор столбца с разными массивами, а некоторые из них - нули, когда я делаю

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
null null

Если кто-то знает, как отключить нулевые значения, это было бы очень полезно. Я искал в Интернете и увидел, что мы могли бы включить предложение WITH ORDINALITY, но я не знаю, как это работает.


person Aude Hamdi    schedule 05.05.2021    source источник


Ответы (1)


Используйте 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

Просто используйте правильный ключ соединения

person leftjoin    schedule 06.05.2021