UNNEST не возвращает строк для пустого массива - PullRequest
0 голосов
/ 03 мая 2020

Я использую unnest для более сглаживания более одного массива в запросе Афины. Когда массив имеет несколько записей, он возвращает правильный результат. Но когда второй массив пуст, он не возвращает записей. Может кто-нибудь, пожалуйста, дайте мне знать, как сделать unnest, чтобы удалить несколько массивов в одном запросе?

Следующий запрос возвращает пустую строку.

WITH example AS (
 SELECT devop, devs 
 FROM

   UNNEST(ARRAY['Sharon', 'John', 'Bob', 'Sally']) AS t(devop),
     UNNEST(ARRAY[]) AS t(devs)
)
select array_join(array_agg(distinct example.devop),';'),array_join(array_agg(distinct example.devs),';') from example

Следующий запрос возвращает правильный результат .

WITH example AS (
 SELECT devop, devs 
 FROM

   UNNEST(ARRAY['Sharon', 'John', 'Bob', 'Sally']) AS t(devop),
     UNNEST(ARRAY['a','b']) AS t(devs)
)
select array_join(array_agg(distinct example.devop),';'),array_join(array_agg(distinct example.devs),';') from example

Когда второй массив пуст, я хочу получить следующий результат

_col0                             _col1
----------------------------------------------
Sally;John;Bob;Sharon              

Ответы [ 2 ]

3 голосов
/ 03 мая 2020

Используйте left join:

WITH example AS (
      SELECT devop, devs 
      FROM UNNEST(ARRAY['Sharon', 'John', 'Bob', 'Sally']) AS t(devop) LEFT JOIN
           UNNEST(ARRAY[]) AS t(devs)
           ON 1=1
    )
. . .
2 голосов
/ 03 мая 2020

Я не думаю, что вы хотите cross join здесь. Вместо этого вы могли бы сформулировать это как:

select 
    array_join(
        array_agg(distinct unnest(array['Sharon', 'John', 'Bob', 'Sally'])),
        ';'
    ) devops,
    array_join(
        array_agg(distinct unnest(array[])),
        ';'
    ) devs
...