1

JOOQで以下のような条件を書きたい

AND (id,name) IN (('id1','name1'),('id2','name2'),...)

私はこの構文を試しました

Condition condition= DSL.concat(idField,nameField).in("");

生成する

concat(cast(`id` as char), cast(`name` as char)) in ('id1name1',"id2name2",....))

しかし、このソリューションは、インデックスをスキップすることにより、大きなパフォーマンスの問題につながります

2つのフィールドを一緒にする方法がわかりません

ご協力いただきありがとうございます

4

1 に答える 1

2

実際に行の値式の述語を使用したい場合は、文字列の連結を使用しないでください。ここに記載されているように、jOOQ の行値式サポートを使用します: http://www.jooq.org/doc/3.0/manual/sql-building/column-expressions/row-value-expressions

またはより具体的には:

// import static org.jooq.impl.DSL.row;
Condition condition = row(ID, NAME).in(row("id1", "name1"), row("id2", "name2"));

の一般的な varargs パラメータにより、警告を抑制する必要がある場合があります。Row2.in(Row2...)

ターゲット データベースが行値式をサポートしていない場合、jOOQ は上記をこの述語に展開します。

(ID = 'id1' AND NAME = 'name1') OR (ID = 'id2' AND NAME = 'name2')
于 2013-05-28T11:14:59.203 に答える