Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 使用knex对子查询进行连接_Sql_Knex.js - Fatal编程技术网

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
条件更容易。它应该针对相同的查询进行优化。