3

谁能帮我查询postgres中的多对多关系表?

我有桌子:

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

假设我们有一个练习通过 tag_in_exercise 与两个标签绑定

使用查询时:

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 回答