【问题标题】:How to write a condition with more than one field with jooq如何使用 jooq 编写具有多个字段的条件
【发布时间】:2013-05-28 09:31:12
【问题描述】:

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

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

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

感谢您的帮助

【问题讨论】:

  • 发表你的尝试?

标签: java sql jooq row-value-expression


【解决方案1】:

不要使用字符串连接,实际上你想使用行值表达式谓词!使用此处记录的 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"));

由于Row2.in(Row2...) 中的通用可变参数参数,您可能需要禁止显示警告

如果你的目标数据库不支持行值表达式,jOOQ 会将上面的内容扩展到这个谓词

(ID = 'id1' AND NAME = 'name1') OR (ID = 'id2' AND NAME = 'name2')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-13
    相关资源
    最近更新 更多