Knex.js subselect for 'in' 子句作为连接的一部分

Knex.js subselect for 'in' clause as part of join

在这个问题上我的头撞到了墙上。这是一个来自相当复杂的连接的 'on' 子句:

on kr.id = urm.role_id and kr.client in (select id from client where client.client_id = ?)

我试图找到一种更优雅的构造子查询的方法,但到目前为止,我为 'and' 之后的子句想出的最好方法是:

.andOn('kr.client','in', knex.raw('select id from client where client.client_id = '))

但我觉得应该有一些方法可以使用 andOnIn 和子选择来形成它。

提前感谢您的建议!

我正在使用 objection.js,对我来说 andOnIn + 子查询就可以了。它也应该与香草 knexjs 一起使用。不幸的是,似乎缺少 andOnIn + 子查询的类型,因此您可能需要 // @ts-ignore 或者可能提交带有类型修复的 PR。

query.leftJoin('kr`, (join) => {
  join
    .on('kr.id', 'urm.role_id')
    .andOnIn('kr.client', knex('client').select('id').where(...));
});