3

postgre で多対多のリレーション テーブルをクエリするのを手伝ってくれる人はいますか?

私はテーブルを持っています:

> 1.exercise(id,name)
> 2.tag(id,label)
> 3.tag_in_exercise(id,exercise_id,tag_id)

tag_in_exercise を介して 2 つのタグに結合された 1 つの演習があるとします。

クエリを使用する場合:

select e.id,t.label from exercise e 
left join tag_in_exercise te on e.id=te.exercise_id  
left join tag t on te.tag_id=t.id

私はjsonを受け取ります

[ { id: 1,
    label: 'basic1' },
  { id: 1,
    label: 'basic2' }]

しかし、ネストされたjsonとして受け取りたい

[ { id: 1,
    tags:[ {'basic1'},{'basic2'} ]
}]

標準のpostgresqlクエリを使用してそれを取得することは可能ですか、それともORMを使用する必要がありますか?

または、別の解決策があれば教えてください。

ありがとう

4

1 に答える 1

2

PostgreSQL は、投稿した JavaScript オブジェクトを返しません。ノード ドライバーは、PostgreSQL から返された配列の配列を変換しており、ドライバーはそれを JavaScript オブジェクトに変換しています。

ただし、PostgreSQL に、 array_aggを使用して希望どおりに変換されると思われる構造を返すようにさせることができます。

これを試して:

SELECT e.id,array_agg(t.label) AS label FROM exercise e LEFT JOIN tag_in_exercise te on e.id=te.exercise_id LEFT JOIN tag t on te.tag_id=t.id GROUP BY e.id;

必要な構造で未加工の PostgreSQL の結果が得られます。うまくいけば、ドライバーは意図したとおりに変換します。

id | label
----+----------------- 1 | {basic1,basic2} 2 | {NULL}

于 2014-11-09T13:10:37.273 に答える