对于Postgres中的大型“in”条件,请执行以下操作
在(值(A),(B),(C))中
可能会导致比
在(a,b,c)中
在JOOQ中,我可以用
Field f = ...
Row1[] rows = new Row1[array.length];
for (int i=0;i<array.length;i++)
rows[i] = DSL.row(array[i]);
Condition c = f.in(DSL.selectFrom(DSL.values(rows)));但如果我需要投出这些价值观呢?具体来说,当将值与citext列进行比较时,需要将其中至少一个值显式转换为citext,以使查询工作。示例:
select distinct "x0"."pk"
from "sometable" as "x0"
where "x0"."external_shared_id" in ( values
('ext0308174863'::citext),
('ext1560238348'))我怎么用JOOQ写这个呢?
发布于 2021-04-27 19:03:47
目前还没有记录在案的方法来创建自定义数据类型,以便在强制转换中使用。您可以自己承担使用内部API的风险,我将在这里不对此进行文档说明。我创建了一个特性请求来创建这样的DataType引用:https://github.com/jOOQ/jOOQ/issues/11806
citext支持的显式特性请求如下:https://github.com/jOOQ/jOOQ/issues/5934
一如既往,当jOOQ不支持特定于供应商的功能时,普通SQL模板是您的朋友。。所以,就这么做吧:
rows[i] = row(field("{0}::citext", String.class, val(array[i])));假设以下静态导入:
import static org.jooq.impl.DSL.*;https://stackoverflow.com/questions/67275840
复制相似问题