JOOQ - 选择查询

内选择计数我有一个问题,同时将下面的语句为jooq API:JOOQ - 选择查询

SELECT t1.col1, t1.col2, t1.col3, (SELECT count(*) FROM table2 where table2.col2 = t1.col1) 

FROM table1 t1

DSL.count()DSL.selectCount()尝试过,但我失败了,而搜索的方式来where子句添加到计数子查询。

该数据库是PostgreSQL 9.6。

回答:

Lukas建议使用DSL.field是更好的解决方案,因为它保留<T>类型。

更多类型安全的版本:

TableField<Table1Record, Long> col1 = TABLE1.COL1; 

Field<Integer> count = DSL.field(DSL.selectCount().from(TABLE2).where(TABLE2.COL2.eq(col1)));

using(configuration).select(col1, count).from(TABLE1).fetch();

我的第一个(较少的类型安全)解决方案:

TableField<Table1Record, Long> col1 = TABLE1.COL1; 

Field count = DSL.selectCount().from(TABLE2).where(TABLE2.COL2.eq(col1)).asField("count");

using(configuration).select(col1, count).from(TABLE1).fetch();

也许还有一个更优雅的解决方案,但它的工作原理。生成的查询看起来像我原来的查询。

回答:

下面是使用DSL.field(...)另一个例子:

 Field<Integer> COUNT = DSL.field("COUNT(*) OVER()", Integer.class); 

List<Map<String, Object>> records = DSL.select(ACCESSORY.ID,

ACCESSORY.NAME,

ACCESSORY.TYPE,

ACCESSORY.PRICE,

BRAND.NAME,

COUNT.as("total"))

.from(ACCESSORY)

.innerJoin(BRAND).onKey()

.fetchMaps();

的结果集将包含一个称为total柱,其将被视为一种类型的java.lang.Integer。这适用于PostgreSQL 9.6。

COUNT(*) OVER()的详细说明可以在这里找到:here。

以上是 JOOQ - 选择查询 的全部内容, 来源链接: utcz.com/qa/264041.html

回到顶部