2

为了向数据库中的对象添加标签,采用以下方案似乎是一种常见的方法:

实体具有一些属性和许多可以添加到它们的标签。假设有三个表:

具有列 ID 和 NAME(以及一些其他值)的表元素,
具有列 TAGID 和 TAGNAME 的表标签以及具有 TAGID 和 ELEMENTID
的表 TagsToElement 将标签分配给元素。

我想知道,这是从数据库中读取分配了特定标签的元素的好方法。我的意思是,来自 Jooq 的条件如何仅过滤掉分配了特定标签的元素。

这是否可能只对数据库进行一次访问?

问候

麦克风

4

1 回答 1

0

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

于 2013-09-02T15:10:36.383 回答