使用具有多个条件的内部联接

Posted

技术标签:

【中文标题】使用具有多个条件的内部联接【英文标题】:Using inner join with more than one condition 【发布时间】:2020-04-09 01:08:35 【问题描述】:

我有以下 SQL:

select table2.employee_id as manager_id, table1.employee_id as employee_id, table3.has_day_off
from "company".employee as table1
inner join "company".employee table2 on (table1.manager_id = table2.id)
inner join "company".employee_details table3 on (table3.employee_id = table1.employee_id and table3.manager_id = table2.employee_id and table3.branch_type = '<type>')
where table1.employee_code = '<employee code'

我将从给定的employeeCode 和branchType 返回employeeId、managerId 和“bool”dayOff。 我尝试了很多方法来将此逻辑传输到 Knex,在一个打字稿应用程序中,但无法开始工作。

任何人都可以为这个包含三个变量的 innerJoin 建议一种方法吗?

【问题讨论】:

knexjs.org/#Builder-innerJoin 中的第三个示例 【参考方案1】:

请参阅 Mikael 的评论。我将通过一个示例来明确说明:

knex
  .withSchema('company')
  .select(
    't2.employee_id as manager_id',
    't1.employee_id as employee_id',
    't3.has_day_off'
  )
  .from('employee t1')
  .innerJoin('employee t2', 't1.manager_id', 't2.id')
  .innerJoin('employee_details t3', function () 
    this.on('t3.employee_id', '=', 't1.employee_id')
      .andOn('t3.manager_id', '=', 't2.employee_id')
      .andOn('t3.branch_type', '=', '<type>')
  )

当然没有经过测试,但这是一般的想法。

【讨论】:

以上是关于使用具有多个条件的内部联接的主要内容,如果未能解决你的问题,请参考以下文章

具有内部联接、多个分组依据和最小最大值的 Linq 查询

使用多个内部联接时,与使用单个内部联接时相比,我得到不同的结果

Access 中部分列的内部联接

两个查询之间的内部联接导致“无效操作”

在 HashMap 上具有内部联接的 HQL NamedQuery

具有内部联接的重复列