2014-01-15 42 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 

這使得在陣列格式輸出。