使用knex联接子查询

时间:2018-12-01 11:01:23

标签: sql knex.js

我想要实现的是在子查询上进行联接,即:

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实现这一目标?

1 个答案:

答案 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);
  })

https://runkit.com/embed/sqavpxeds1cn