2014-01-15 25 views
9

2つのテーブルを使用して入れ子になったjson配列を作成しようとしています。Postgresはrow_to_jsonを使用してJSON配列をネストしました

私は2つのテーブルjournalとjournaldetailを持っています。

スキーマがある -

ジャーナル:journalid、totalamount

journaldetail:journaldetailid、journalidfk、口座、金額ジャーナルとjournaldetail間

関係は1対多です。

は、私は次の形式で出力したい:

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

、出力はこのようなものです::このpostごとにこのクエリを記述することで、しかし

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

をクエリがある

{ 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 

これは、アレイ形式での出力が得られます。

関連する問題