使用 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);
  })

https://runkit.com/embed/sqavpxeds1cn