knex.js连接两个子查询(嵌套查询)

Sal*_*lar 7 knex.js

我想在knex.js中加入两个子查询并产生此sql结果。

SELECT '*'
FROM
    (
    SELECT
        `*`
    FROM
        `A`
    WHERE
        A.id = 1
) AS `t1`
LEFT JOIN
    (
    SELECT
        *
    FROM
        `B`
    WHERE
       B.id = 2
) AS `t2`
ON
    `t1`.`c` = `t2`.`d`
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

小智 6

使用此代码:

knex
        .select('*')
        .from(function () {
            this.select('*').from('A')
                .where('id',1)
                .as('t1');
        })
        .leftJoin(
            knex('B').where('id',2).as('t2')
            , function () {
                this.on('t1.c', '=', 't2.d');
            })
Run Code Online (Sandbox Code Playgroud)


Mik*_*stö 5

knex(
  knex('A').where('A.id',1).as('t1')
).leftJoin(
  knex('B').where('B.id', 2).as('t2'), 
  't1.c', 
  't2.d'
)
Run Code Online (Sandbox Code Playgroud)

  • 关于在knex中进行一些特定查询的问题大约有1000种,因此我在回答这些问题时不再解释knex的工作原理。对于使用knex的人来说,这种用法示例很容易解释。就像“ hu,我不知道我可以在那里传递查询构建器!” (7认同)
  • 虽然此代码片段可以解决问题,但[包括解释](http://meta.stackexchange.com/questions/114762/explaining-entirely-‌​code-based-answers)确实有助于提高帖子的质量。请记住,您是在为将来的读者回答问题,而那些人可能不知道您建议代码的原因。 (3认同)
  • 请注意,“.as('t1')”的位置很重要 - 我的查询被搞砸了,因为我错误地将“.as('t1')”放在“.leftJoin(...”之前”。第一组括号,而不是“.where('A.id',1)”之后。 (2认同)