当前位置: 首页 > 知识库问答 >
问题:

在JOOQ中建立动态表联接

微生新霁
2023-03-14
SelectJoinStep<?> selectClause = select(field("ColumnA"), field("ColumnB"))
.from(table("TableA"));

if(condition) {
  selectClause.join(table("TableB), JoinType.JOIN).on(field("columnA").eq(field("columnB")));
}
org.jooq.Query ps = selectClause.where(whereClause);
    List<Field<?>> fields = new ArrayList<Field<?>>();
    fields.add(...);
    Table<?> from = table("TableA");
    if(condition) {
      from.join(table("TableB), JoinType.JOIN).on(field("columnA").eq(field("columnB")));
    }
org.jooq.Query ps = select(fields).from(from);

共有1个答案

邓浩漫
2023-03-14

将jOOQ用于动态SQL的最佳方法是一种功能更强的方法。在某些情况下,不要考虑“交换”查询的部分。考虑查询的哪些部分是由谁通过函数提供的?例如:

ResultQuery<?> query(
    Supplier<Collection<SelectField<?>>> select,
    boolean condition,
    boolean paginate
) {
    Condition whereClause = ...;
    Table<?> from = table("TableA");
    if (condition)
        from = from.join(table("TableB")).on(field("ColumnA").eq(field("ColumnB")));

    return select(select.get())
          .from(from)
          .where(whereClause)
          .limit(paginate ? 10 : Integer.MAX_VALUE); // Could be done differently
}

现在调用上面的:

query(() -> Arrays.asList(field("ColumnA"), field("ColumnB")), true, true);
query(() -> Arrays.asList(count()), true, false);

当然,另一种选择是使用窗口函数来计算计数值,而不是运行两个查询:

count().over()
 类似资料:
  • 任何帮助都很感激! 编辑

  • 问题内容: 我正在寻找学习如何动态构建Redux表单。想法是,名为componentDidMount的组件从服务器处获取项目列表,并将其插入商店store.my_items中: 现在这些项目都在商店中,我想为store.my_items中的每个项目构建一个带有字段的redux表单。 例如,其中一些动态创建: 使用react,redux-form,什么是构建这种动态redux表单的正确方法? 谢谢

  • 问题内容: 让我们假设以下内容: 表A 我有一个ID列表(10、11、12、13、14),可用于在此表中查找ID。这个ID清单是在我的前端生成的。 使用纯SQL,我需要从此列表(10、11、12、13、14)中选择ID,这些ID在表A中没有条目(在“ id”列中联接)。结果应该是id的13和14的结果集。 如何仅使用SQL完成此操作?(此外,如果可能,我想避免使用存储过程) 我能想到的唯一方法是,

  • 问题内容: 如何在javascript关联数组中动态创建键? 到目前为止,我发现的所有文档都是更新已创建的密钥: 我有这样的字符串 我想结束这样的事情: 那就是我分割字符串并获取第一个元素,然后将其放入字典中。 码 问题答案: 使用第一个示例。如果密钥不存在,它将被添加。 将弹出一个包含“ oscar”的消息框。 尝试:

  • 我正试图将这个查询转换为jOOQ,但遇到了用于将值连接到数组的“”。 如何将值连接到数组?