我想用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",....))
但是这个解决方案通过跳过索引导致了巨大的性能问题
我不知道如何将两个领域放在一起
感谢您的帮助
答案 0 :(得分: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参数,您可能需要取消警告
如果目标数据库不支持行值表达式,则jOOQ会将上述内容扩展为此谓词
(ID = 'id1' AND NAME = 'name1') OR (ID = 'id2' AND NAME = 'name2')