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

如何使用JOOQ从子查询中添加jsonb函数

程俊力
2023-03-14

如何使用Jooq构建这个查询?

select et.id 
from t, et, 
    jsonb_array_elements(t.keys_and_values) as s, jsonb_object_keys(s) as s1
where et.id = t.id
and s1 = 'key'

共有1个答案

糜鸿风
2023-03-14

当您缺少对特定于供应商的SQL特性的API支持时,您可以求助于使用普通的SQL模板API。即。写

Table<?> s = DSL.table("jsonb_array_elements({0})", T.KEYS_AND_VALUES).as("s");
Table<?> s1 = DSL.table("jsonb_object_keys({0})", s).as("s1");

然后,为了形成谓词,可以写:

DSL.condition("{0} = {1}", s1, DSL.val("key"));

还有许多其他方法,都使用普通的SQL模板API,这取决于您希望重用某些供应商特定的函数表达式等。

 类似资料:
  • 我用的是Jooq3.10。我想为每个选择、更新和删除查询添加具有动态值的默认条件。 例1: 我如何做到这一点?

  • 问题内容: 我正在寻找一种使用数组中的“ IN”子句查询postgres jsonb字段的方法。 假设我有一张桌子 我需要选择test_content数组中的label可能为或的行。 我试过了 但是当我想用包含扩展查询时,或者变得复杂… 我需要的是 jsonb运算符可以吗? 问题答案: 简短答案 您可以在横向联接中使用该函数,并在子句中的复杂表达式中使用其结果: 不同 当在单个行中的多个数组元素中

  • 我正试图从JSONB转换为Google GSON JSONElement。我使用的转换器来自:https://www.jooq.org/doc/3.11/manual/code-generation/custom-data-type-bindings/ TableImpl中的列:

  • 在Jooq中运行上述查询的最佳方式是什么?我知道我可以用普通SQL编写查询,但我想看看是否有更好的方法来实现这一点。

  • 我需要从一个非常大的表中选择一个“页”的数据。由于WHERE子句和需要分页到相当大的偏移量,我使用一个子查询来获取ID。只有在末尾放置时,此策略才有效。这导致(我认为)到数据库的额外往返。有什么方法可以避免额外的? 附言。我这样做的原因是由于orderBy/offset/limit用于大偏移量(我选择的列之一由于是blob类型,不适合添加到索引中,所以我不能创建覆盖索引)。