gpt4 book ai didi

java - 使用 JOOQ 具有两个字段的别名

转载 作者:行者123 更新时间:2023-11-30 02:24:56 26 4
gpt4 key购买 nike

我有一个令人讨厌的 SQl,我想在 JOOQ 中进行转换

以下是查询:

  SELECT 
SUM(dpr.dpr_bruttopraemie_prt + dpr.dpr_sofortrabatt_prt)
, MAX(TO_NUMBER(DP1.dp_wert))
FROM deckungen deck, deckungspraemien dpr,
(SELECT dp.dp_id, dp.dp_wert
FROM textbausteine txb, druckparameter dp
WHERE dp.dp_txb_id = txb.txb_id
) DP1
WHERE DP1.dp_id = :druckparameter_id;

如您所见,我需要从具有两个字段的选择中创建别名。

dp.dp_id, dp.dp_wert 

我将在其他一些部分使用它。

我怎样才能完成它?

我见过

.asField() 

Funktion,但它只为一列创建别名。

PS:实际的查询要复杂得多。所以我写了一个更简单的。希望它能满足 SQL ORACLE Dialect。

最佳答案

我假设您正在使用代码生成器,因此您已经生成了可用于表的对象,例如 DECKUNGEN。我还假设您正在使用这些静态导入:

import static org.jooq.impl.DSL.*;                  // The jOOQ API
import static com.example.myapp.generated.Tables.*; // Your generated tables

然后你可以写:

Deckungen deck = DECKUNGEN.as("deck");
Deckungspraemien dpr = DECKUNGSPRAEMIEN.as("dpr");
Textbausteine txb = TEXTBAUSTEINE.as("txb");
Druckparameter dp = DRUCKPARAMETER.as("dp");

Table<?> dp1 = table(
select(dp.DP_ID, dp.DP_WERT)
.from(txb, dp)
.where(dp.DP_TXB_ID.eq(txb.TXB_ID))
).as("dp1");

Record2<BigDecimal, BigDecimal> result =
using(configuration)
.select(
sum(dpr.DPR_BRUTTOPRAEMIE_PRT.plus(dpr.DPR_SOFORTRABATT_PRT)),
max(field("to_number({0})", BigDecimal.class, dp1.field(dp.DP_WERT))))
.from(deck, dpr, dp1)
.where(dp1.field(dp.DP_ID).eq(druckparameterId))
.fetchOne();

一些解释

旁注

我认为您的查询不正确,因为您只是在表 deckdprdp1 之间创建笛卡尔积。具体来说,SUM() 很可能是错误的,而 MAX() 的计算效率很低。

关于java - 使用 JOOQ 具有两个字段的别名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45883174/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com