与jOOQ 一样,您首先应该问自己的问题是:“我将如何用 SQL 编写它?”。在 SQL 中,你会写
SELECT *
FROM Element
WHERE EXISTS (
SELECT 1
FROM Tags
JOIN TagsToElement
ON Tags.TAGID = TagsToElement.TAGID
WHERE Element.ID = TagsToElement.ELEMENTID
AND Tags.TAGNAME = 'Specific Name'
)
将上述 1:1 转换为 jOOQ:
// import static org.jooq.impl.DSL.*; is assumed
DSL.using(configuration)
.selectFrom(Element)
.whereExists(
selectOne()
.from(Tags)
.join(TagsToElement)
.on(Tags.TAGID.eq(TagsToElement.TAGID))
.where(Element.ID.eq(TagsToElement.ELEMENTID))
.and(Tags.TAGNAME.eq("Specific Name"))
)
IN
显然,您也可以使用谓词而不是谓词来表达您的半连接EXISTS
。