首页 > 解决方案 > 如何使用 JOOQ 在 FROM 子查询中添加 jsonb 函数

问题描述

您如何使用 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'

标签: javajooq

解决方案


每当您缺少对供应商特定 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,具体取决于您希望重用某些供应商特定函数表达式的程度等。


推荐阅读