2014-01-15 13 views
9

Ich versuche, verschachtelte Json-Array mit 2 Tabellen zu erstellen.Postgres verschachtelte JSON-Array mit row_to_json

Ich habe 2 Tabellen Journal und journaldetail.

Schema ist -

Zeitschrift: journalid, TotalAmount

journaldetail: journaldetailid, journalidfk, Konto, Betrag

Beziehung zwischen Zeitschrift und journaldetail ist eine Eins-zu-viele.

möchte ich die Ausgabe in folgendem Format:

{ journalid : 1, 
totalamount : 1000, 
journaldetails : [ 
    { 
     journaldetailid : j1, 
     account : "abc", 
     amount : 500 
    }, 
    { 
     journaldetailid : j2, 
     account : "def", 
     amount : 500 
    } 
]} 

jedoch durch diese Abfrage nach dieser post Schreiben der Abfrage ist:

select j.*, row_to_json(jd) as journal from journal j 
inner join (
    select * from journaldetail 
) jd on jd.sjournalidfk = j.sjournalid 

und der Ausgang ist wie folgt aus:

{ journalid : 1, 
totalamount : 1000, 
journaldetails : 
    { 
     journaldetailid : j1, 
     account : "abc", 
     amount : 500 
    } 
} 
{ journalid : 1, 
totalamount : 1000, 
journaldetails : 
    { 
     journaldetailid : j2, 
     account : "def", 
     amount : 500 
    } 
} 

Ich möchte die untergeordneten Tabellendaten als geschachtelte Array im übergeordneten.

Antwort

17

fand ich die Antwort von here:

Hier ist die Abfrage:

select row_to_json(t) 
from (
    select sjournalid, 
    (
     select array_to_json(array_agg(row_to_json(jd))) 
     from (
     select sjournaldetailid, saccountidfk 
     from btjournaldetail 
     where j.sjournalid = sjournalidfk   
    ) jd 
    ) as journaldetail 
    from btjournal j 
) as t 

Dies gibt Ausgang in Array-Format.