Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

168
Views
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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!