java - 如何使用 Jooq 中的其他自定义(concat,sum,count)列从数据库中获取所有结果列

标签 java sql jooq

我有一个包含 6 列的表 Table1。

这是我需要映射的sql语句。

Select *,count(ID) as IdCount from Table1;

现在,sql 查询结果将是 7 列(6 列 Table1 和 1 IdCount 列)。但是当我用这个查询在 Jooq 中实现相同的功能时,它只会得到一个列“IDCount”。

SelectQuery q = factory.selectQuery();
        q.addSelect(Table1.ID.count().as("IdCount"));
        q.addFrom(Table1.TABLE1);

现在,生成的记录集只有一个列“IdCount”,而我需要的是所有列和一个附加列“IdCount”。我也想要 Jooq 中的 7 列。

最佳答案

选项 1(使用星号):

*(星号,星号)运算符已通过 DSL.asterisk() 添加到 jOOQ 3.11| (不合格的星号)或通过 Table.asterisk() (合格的星号)。它可以像投影的任何其他列一样使用。

在 jOOQ 3.11 之前,还有以下其他选项:

选项 2(使用 DSL 语法):

List<Field<?>> fields = new ArrayList<Field<?>>();
fields.addAll(Arrays.asList(Table1.TABLE1.fields()));
fields.add(Table1.ID.count().as("IdCount"));

Select<?> select = ctx.select(fields).from(Table1.TABLE1);

选项 3(使用您使用的“常规”语法):

SelectQuery q = factory.selectQuery();
q.addSelect(Table1.TABLE1.fields());
q.addSelect(Table1.ID.count().as("IdCount"));
q.addFrom(Table1.TABLE1);

选项 4(在后来的 jOOQ 版本中添加):

// For convenience, you can now specify several "SELECT" clauses
ctx.select(Table1.TABLE1.fields())
   .select(Table1.ID.count().as("IdCount")
   .from(Table1.TABLE1);

以上所有选项都使用 Table.fields()方法,这当然依赖于运行时存在的元信息,例如通过使用代码生成器。

关于java - 如何使用 Jooq 中的其他自定义(concat,sum,count)列从数据库中获取所有结果列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5832803/

相关文章:

java - 平台碰撞和跳跃的奇怪行为

java - WordCount 项目缺陷

python - 类型错误 : 'int' object does not support indexing

sql - 在任何 OUTER JOIN 之后使用 INNER JOIN 是否真的会使 OUTER JOIN 的效果无效?

json - 如何将对象转换为 Jooq JSON

postgresql - JOOQ 不从 PostgreSql 生成表值重载过程

postgresql - 使用 jOOQ 中的部分索引更新插入 "on conflict do update"

java - JVM native 内存跟踪如何限制类元数据大小

java - 尝试从 Jhipster 项目获取 war 文件

mysql - 从不存在查询中选择