我想要实现的是在子查询上进行联接,即:
select A.*, B.*, C.* from A
join C on C.id = A.c_id
join B on B.id = (
select id from B
where B.created_at > C.created_at
order by B.created_at asc
limit 1
)
我尝试过的事情:
...
.leftJoin('B', 'B.id', knex.select(...
...
哪个没用。 还尝试过:
...
.leftJoin('B', function () {
this.on('B.id', knex.select(...
})
...
这也不起作用。如何使用knex实现这一目标?
答案 0 :(得分:2)
在传递查询生成器加入时,似乎knex
中仍然存在一些错误。
无论如何,这是实现该查询的方式:
knex('A')
.join('C', 'C.id', 'A.c_id')
.join('B', 'B.id', (builder) => {
builder
.select('id')
.from('B')
.where('B.created_at', '>', knex.ref('C.created_at'))
.orderBy('B.created_at', 'desc')
.limit(1);
})