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",....))

但是这个解决方案通过跳过索引导致了一个巨大的性能问题

我不知道如何将这两个字段放在一起

谢谢你的帮助

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 回答