【问题标题】:knex.js join two subqueries (nested queries)knex.js 加入两个子查询(嵌套查询)
【发布时间】:2018-03-12 16:35:13
【问题描述】:

我想在 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`

我该怎么做?

【问题讨论】:

    标签: knex.js


    【解决方案1】:

    使用此代码:

    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');
                })
    

    【讨论】:

      【解决方案2】:
      knex(
        knex('A').where('A.id',1).as('t1')
      ).leftJoin(
        knex('B').where('B.id', 2).as('t2'), 
        't1.c', 
        't2.d'
      )
      

      【讨论】:

      • 虽然这段代码 sn-p 可以解决问题,但including an explanation 确实有助于提高帖子的质量。请记住,您是在为将来的读者回答问题,而这些人可能不知道您提出代码建议的原因。
      • 关于在 knex 中进行一些特定查询的这类问题大约有 1000 个,所以我在回答这些问题时不再解释 knex 的工作原理。对于使用 knex 的人来说,这种用法示例是不言自明的。就像“嗯,我不知道我可以在那里传递查询生成器!”
      • 请注意 .as('t1') 的位置很重要 - 我的查询被搞砸了,因为我错误地将 .as('t1') 就在 .leftJoin(... 之前第一组括号,而不是 .where('A.id',1)之后。
      猜你喜欢
      • 2019-08-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-12
      相关资源
      最近更新 更多