使用具有多个条件的内部联接
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>')
)
当然没有经过测试,但这是一般的想法。
【讨论】:
以上是关于使用具有多个条件的内部联接的主要内容,如果未能解决你的问题,请参考以下文章
使用多个内部联接时,与使用单个内部联接时相比,我得到不同的结果