Sql 使用knex对子查询进行连接
我试图实现的是对子查询进行联接,即:Sql 使用knex对子查询进行连接,sql,knex.js,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(... ...
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);
})
您可能会发现,将
连接B
的ON
条件更改为WHERE
条件更容易。它应该针对相同的查询进行优化。