我将knex与postgresql db一起使用,我在表A中有一行,它与表B中的行具有一对一的关系,而与表C中的行具有一对多的关系。
我想从A与B和C一起加入一行,并得到一个像这样的json
{
aCol1: ...,
b: {
bCol1: ...,
bCol2: ...,
},
c: [
{
cCol1: ...
},
{
cCol1: ...
}
]
}
aCol
之类的东西表示表A中的列,bCol
-表B中的列是联合的。
如何通过一个查询并加入来实现?
答案 0 :(得分:0)
为此使用JsonAgg
SQL:
选择 tA.id, tA.name, json_agg(tB)as tB 从 “ tA” 左加入“ tB” “ tA”。“ tB_id” =“ tB”。“ id” 通过...分组 “ tA”。“ id”, “ tA”。“名称”
Knex:
Stripe::Subscription.create({
customer: customer.id,
items: [
{price: plan.id},
],
})
答案 1 :(得分:-1)
您可以通过一个查询和联接来实现它,但是它变得过于复杂。您应该改为使用ORM。
Objection.js基于knex,可让您以琐碎而高效的方式进行此类查询(您可以选择使用联接或多个查询,通常,多个查询的性能更高)。
使用Objection.js语法,如下所示:
const res = await ATableModel.query().where('id', a.id).eager('[b,c]');