Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

327
Visualizações
json_array_elements con valores nulos

Estoy usando PostgreSQL 9.4.5, 64 bits en Windows. Tengo algunas matrices de tamaño irregular. Quiero usar json_array_elements para expandir las matrices de forma similar al siguiente código

 with outside as (select (json_array_elements('[[],[11],[21,22,23]]'::json)) aa, json_array_elements('[1,2,3]'::json)bb) select json_array_elements_text(aa), bb from outside

Sin embargo, cuando ejecuto esto, obtengo

 aa | bb ------- 11 | 2 21 | 3 22 | 3 23 | 3

La matriz vacía en la columna aa se deja caer al suelo junto con el valor de 1 en la columna bb

Me gustaría conseguir

 aa | bb ---------- null | 1 11 | 2 21 | 3 22 | 3 23 | 3

Además, ¿es esto un error en PostgreSQL?

over 4 years ago · Santiago Trujillo
3 Respostas
Responde à pergunta

0

Está utilizando las funciones correctas, pero el JOIN incorrecto. Si (posiblemente) no tiene filas en un lado de JOIN y desea mantener las filas del otro lado de JOIN y usar NULL s para "rellenar" las filas, necesitará una OUTER JOIN :

 with outside as ( select json_array_elements('[[],[11],[21,22,23]]') aa, json_array_elements('[1,2,3]') bb ) select a, bb from outside left join json_array_elements_text(aa) a on true

Nota : puede parecer extraño ver on true como la condición de unión, pero en realidad es bastante general, cuando usa uniones LATERAL (lo cual está implícito cuando usa una función de retorno establecida (SRF) directamente en la cláusula FROM ).

http://rextester.com/KNW13145

Editar : su consulta original no implica un JOIN directamente, pero peor: usa un SRF en la cláusula SELECT . Esto es casi como una CROSS JOIN , pero en realidad tiene sus propias reglas . No lo use a menos que sepa exactamente lo que está haciendo y por qué lo necesita.

over 4 years ago · Santiago Trujillo Relatório

0

Esto no es un error. json_array_elements_text('[null]') devuelve null , json_array_elements_text('[]') no devuelve nada.

 with outside as ( select ( json_array_elements('[[],[11],[21,22,23]]'::json)) aa, json_array_elements('[1,2,3]'::json) bb ) select elem as aa, bb from outside, json_array_elements_text(case when aa::text = '[]' then '[null]'::json else aa end) elem; aa | bb ----+---- | 1 11 | 2 21 | 3 22 | 3 23 | 3 (5 rows)
over 4 years ago · Santiago Trujillo Relatório

0

Trabajando con mi propio problema, tengo una respuesta posible, pero parece un desastre

 With initial as (select '[[],[11],[21,22,23]]'::json as a, '[1,2,3]'::json as b), Q1 as (select json_array_elements(a) as aa, json_array_elements(b) bb from initial), Q2 as (select ARRAY[aa->>0, aa->>1, aa->>2] as aaa, bb as bbb, ARRAY[0,1,2] as ccc from q1), -- where the indicices are computed in a separate query by looping from 0 to json_array_length(...) Q3 as (select unnest(aaa) as aaaa, bbb as bbbb, unnest(ccc) as cccc from q2) Select aaaa, bbbb from q3 where aaaa is not null or cccc = 0
over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda