如何使用jOOQ创建SELECT EXISTS(子查询)?

sar*_*gue 7 sql mariadb jooq

我想用jOOQ构建和执行这样的查询.

SELECT EXISTS( subquery )
Run Code Online (Sandbox Code Playgroud)

举个例子:

SELECT EXISTS(SELECT 1 FROM icona_etiqueta WHERE pvp IS NULL AND unitat_venda = 'GRAMS')
Run Code Online (Sandbox Code Playgroud)

我该怎么做?可以吗?

sar*_*gue 8

找到了.我正在寻找一个selectExists方法,并被DSL.exists()谓词构造函数搞糊涂了.

有一个更方便fetchExists(subquery).

我的具体示例如下解决:

create.fetchExists(
        create.selectOne()
              .from(ICONA_ETIQUETA)
              .where(ICONA_ETIQUETA.PVP.isNull(),
                     ICONA_ETIQUETA.UNITAT_VENDA.eq('GRAMS'))
    );
Run Code Online (Sandbox Code Playgroud)

它直接返回一个布尔值.


Luk*_*der 6

您自己的解决方案是您想要做的事情的最方便的方法。更通用的方法是使用:

create.select(field(exists(...)))
Run Code Online (Sandbox Code Playgroud)

将 a Condition(由DSL.exists(Select))包装在Fieldusing 中的地方DSL.field(Condition)

从 jOOQ 3.9 开始,Field<Boolean>Condition不是相同的类型。这可能会在未来通过#3867 改变