2

データベース内のオブジェクトにタグを追加するには、次のスキームを使用するのが一般的なアプローチのようです。

いくつかの属性とそれらに追加できる多くのタグを持つエンティティがあります。3 つのテーブルがあるとします。

列 ID と NAME (およびその他の値) を持つテーブル要素
、列 TAGID と TAGNAME を持つ
テーブル タグ、要素にタグを割り当てる TAGID と ELEMENTID を持つテーブル TagsToElement。

特定のタグが割り当てられたデータベースから要素を読み取るには、どの方法がよいのでしょうか。つまり、Jooq の Condition は、特定のタグが割り当てられている ELements のみを除外するのにどのように見えるでしょうか。

これは、データベースへの 1 回のアクセスだけで可能ですか?

ご挨拶

マイク

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 に答える