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

问题描述 投票:14回答:1

我有一个表有1列的表1。

这是我需要映射的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列。

java sql jooq
1个回答
23
投票

选项1(使用星号):

*(星号,星号)运算符已添加到jOOQ 3.11到DSL.asterisk()(不合格的星号)或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()方法,该方法当然依赖于在运行时存在的这种元信息,例如,通过使用代码生成器。

© www.soinside.com 2019 - 2024. All rights reserved.