Java 使用jooq的多个连接

Java 使用jooq的多个连接,java,sql,join,jooq,Java,Sql,Join,Jooq,如何使用jooq连接6个或更多表? 我有以下表格:TPI、TPIREV、成本中心、部门、客户、交易编号 我尝试实现此sql查询(首先没有案例): 选择 案例 当TPI.TPINumber为null时,则“” else TPI.TPINumber 以C0结尾, 案例 当_J0.description不为空时,则_J0.description 其他TPI描述 以C1结尾, TPI.TPI类型为C2, _J4.描述为C3, _J0.停用日期为C4, _J6.时间戳为C5, TPI.id为C6 从…起

如何使用jooq连接6个或更多表? 我有以下表格:TPI、TPIREV、成本中心、部门、客户、交易编号

我尝试实现此sql查询(首先没有案例):

选择
案例
当TPI.TPINumber为null时,则“”
else TPI.TPINumber
以C0结尾,
案例
当_J0.description不为空时,则_J0.description
其他TPI描述
以C1结尾,
TPI.TPI类型为C2,
_J4.描述为C3,
_J0.停用日期为C4,
_J6.时间戳为C5,
TPI.id为C6
从…起
TPI
内部连接TPIRev作为_J0打开
(TPI.activeVersion=_J0.id)
左连接成本中心,如图J7所示
(_J0.costCenter=_J7.id
和(J7.mandant=1))
左加入部门,如图J8所示
(_J7.department=_J8.id
和(J8.mandant=1))
左加入客户为_J4ON
(_J8.customer=_J4.id
和(J4.mandant=1))
左连接事务编号为_J6ON
(_J0.transactionNumber=_J6.id)
哪里
(TPI.mandant=1
和TPI.active=true)
订购人
C0
限制10
所以我试着这样做:

Tpi-Tpi=Tpi.as(“Tpi”);
Tpirev Tpirev=Tpirev.as(“Tpirev”);
成本中心成本中心=成本中心.as(“成本中心”);
部门=部门as(“部门”);
客户=Customer.as(“客户”);
Transactionnumber Transactionnumber=Transactionnumber.as(“Transactionnumber”);
dsl.select(tpi.TPINUMBER、tpi.TPITYPE、tpi.ID)
.来自(tpi)
.innerJoin(tpirev.on)(tpi.ACTIVEVERSION.eq(tpirev.ID))
.leftJoin(costcenter).on(tpirev.costcenter.eq(costcenter.ID.)和(costcenter.MANDANT.eq(Long.valueOf(1))
.leftJoin(department).on(costcenter.department.equal(department.ID.)和(department.MANDANT).equal(Long.valueOf(1))
.leftJoin(customer).on(department.customer).equal(customer.ID.)和(customer.MANDANT).equal(Long.valueOf(1))
.leftJoin(transactionnumber).on(tpirev.transactionnumber).equal(transactionnumber.ID)
其中(tpi.MANDANT.equal(Long.valueOf(1))和(tpi.ACTIVE.eq(true)))
.限额(10)
.fetch();
但是看起来不可能同时使用两个以上的联接。我应该像本例中那样拆分这些联接吗? 还是有别的办法解决呢?请建议

我已经解决了这个问题,结果代码如下:

dsl.select(
DSL.case_uz()
.when(tpi.TPINUMBER.isNotNull(),tpi.TPINUMBER)。否则(“”.as(tpi.TPINUMBER),
DSL.case_uz()
.when(tpirev.DESCRIPTION.isNotNull(),tpirev.DESCRIPTION)。否则(tpi.DESCRIPTION),
tpi.TPITYPE,
客户描述,
tpirev.DEACTIVATIONDATE,
transactionnumber.TIMESTAMP,
tpi.ID)
.来自(tpi)
.innerJoin(tpirev.on)(tpi.ACTIVEVERSION.eq(tpirev.ID))
.leftJoin(costcenter).on(tpirev.costcenter.eq(costcenter.ID.)和(costcenter.MANDANT.eq(Long.valueOf(1)))
.leftJoin(department).on(costcenter.department.eq(department.ID.)和(department.MANDANT.eq(Long.valueOf(1)))
.leftJoin(customer).on(department.customer.eq(customer.ID.)和(customer.MANDANT.eq(Long.valueOf(1)))
.leftJoin(transactionnumber).on(tpirev.transactionnumber.eq(transactionnumber.ID))
其中(tpi.MANDANT.equal(Long.valueOf(1))和(tpi.ACTIVE.eq(true)))
.orderBy(tpi.TPINUMBER)
.限额(10);

我希望这对某人有帮助。

你说的“不可能”是什么意思?您可以在jOOQ中连接任意多个表。没有这样的限制。@Lukas Eder感谢您的回复,您是对的,这是可能的。我只是找不到任何一个同时连接超过2-3个的示例。我对括号有错误,我对jOOQ的第一个查询:)和eclipse没有什么帮助。我明白了:)是的,这些括号可能会在进行更繁重的嵌套时遇到阻碍……你说的“不可能”是什么意思?您可以在jOOQ中连接任意多个表。没有这样的限制。@Lukas Eder感谢您的回复,您是对的,这是可能的。我只是找不到任何一个同时连接超过2-3个的示例。我的括号错误,我对jOOQ的第一个查询:)eclipse并不是很有帮助。我明白了:)是的,这些括号会在进行更繁重的嵌套时产生阻碍。。。