使用 knex 加入子查询
Join on subquery with knex
我想要实现的是加入子查询,即:
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 实现这一点?
看起来 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);
})
我想要实现的是加入子查询,即:
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 实现这一点?
看起来 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);
})