2014-01-15 39 views
9

我想使用2个表创建嵌套json数组。Postgres使用row_to_json嵌套JSON数组

我有2个表日记和journaldetail。

模式是 -

杂志:journalid,总金额

journaldetail:journaldetailid,journalidfk,账号,金额期刊和journaldetail之间

关系是一对多。

我要在以下格式的输出:

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

然而,通过编写此查询按本post查询是:

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

和输出是这样的:

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

我想要父表中的子表数据作为嵌套数组。

回答

17

我找到了答案,从here

下面是该查询:

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 

这使得在阵列格式输出。