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