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

169
Visualizações
postgresql muestra dos sublistas en un resultado

Asumiendo el esquema muy simple

mesa principal

 main_id, ... 1 , ... 2 , ...

tabla sub1

 main_id, sub1_data 1 , a 1 , b 2 , g

tabla sub2

 main_id, sub2_data 1 , 1 2 , 1 2 , 2

Como salida me gustaría

 main_id, sub1_data, sub2_data 1 , a , 1 1 , b , <null> 2 , g , 1 2 , <null> , 2

Usando una unión puedo acercarme pero luego cada lista obtiene sus propias filas

 SELECT main_id, sub1_data, NULL FROM sub1 UNION SELECT main_id, NULL, sub2_data FROM sub2

resultado

 main_id, sub1_data, sub2_data 1 , a , <null> 1 , b , <null> 1 , <null> , 1 2 , g , <null> 2 , <null> , 1 2 , <null> , 2

Entonces, ¿hay alguna manera de obtener dos filas compartidas y usar tantas filas como la lista más larga?

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

0

Una cosa que puede darle esta salida "intercalada" es la función unnest() con múltiples parámetros (o su equivalente: la construcción ROWS FROM(...) ) :

Las funciones de tabla también se pueden combinar usando la sintaxis ROWS FROM , con los resultados devueltos en columnas paralelas; el número de filas de resultados en este caso es el del resultado de la función más grande, con los resultados más pequeños rellenados con valores nulos para que coincidan.
...
La función de tabla especial UNNEST se puede llamar con cualquier número de parámetros de matriz y devuelve un número correspondiente de columnas, como si se hubiera llamado a UNNEST en cada parámetro por separado y combinado usando la construcción ROWS FROM .

 select main_id, sub1_data, sub2_data from (select main_id, array_agg(sub1_data) sub1_arr from sub1 group by main_id) s1 full join (select main_id, array_agg(sub2_data) sub2_arr from sub2 group by main_id) s2 using (main_id) cross join unnest(sub1_arr, sub2_arr) u(sub1_data, sub2_data)

http://rextester.com/QSWESJ84203

Nota : esta es una característica "relativamente" nueva: se introdujo en 9.4

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