값을 추적하다 보니 몇개가 사라져서 역으로 찾다보니

unnest() 안에 들어가는 항목이 null 일 경우에는 (empty array가 아닌 null)

아예 해당 항목 자체가 select 되지 않는 문제가 존재한다.

 

해결법이 맞는진 모르겠지만..

null일 조건 비교해서 두번 선택해야 할지도?

(한번에 선택하는 법이 있으면 좋겠네)..

 

값을 비교해서 unnest 하거나, lateral join을 쓴다는데

lateral join을 아직 모르니.. 일단 값 비교 하는걸로 해야겠다.

(다만, case 에서 multiple row는 리턴하지 못하도록 되어있으니 주의)

[링크 : https://stackoverflow.com/questions/15175187/postgresql-unnest-with-empty-array]

[링크 : https://dba.stackexchange.com/questions/119201/how-does-unnest-treat-null-values-and-empty-arrays]

 

+

SQL 특성(?)인지 당연하게도 해당 내용이 있는지 확인하고

배열이 있으면 해당 배열을 unnest 하고

배열이 없으면 null 배열을 넣어서 처리하도록 하면 해결은 된다..

(null 배열이 아니라 해당 필드가 null 이기 때문에 발생한 경우는 해결 됨)

WITH tbl(id, arr) AS (
   VALUES
     (1, '{a}'::text[])
   , (2, '{NULL}'::text[])
   , (3, '{}'::text[])
   , (4, '{x,y,z}'::text[])
   )
SELECT id, elem
FROM   tbl t
     , unnest (
          CASE WHEN array_length(t.arr, 1) >= 1
               THEN t.arr
               ELSE '{null}'::text[] END
       ) elem;

[링크 : https://dba.stackexchange.com/questions/119201/how-does-unnest-treat-null-values-and-empty-arrays]

Posted by 구차니