JOOQ嵌套条件

时间:2012-06-28 15:21:19

标签: java sql jooq

您好我想知道如何在jooq中写这样的东西

select * from table 
where ( ( a = query or b = query or a = query ) 
and ( e = query or g = query or z = query) )

我无法弄清楚如何在jooq中执行嵌套条件。请帮忙。

1 个答案:

答案 0 :(得分:6)

您需要了解API的以下部分:

public interface Condition {
    Condition and(Condition other);
    Condition or(Condition other);
}

因此,任何Condition都可以使用Conditions / and()方法(以及其他方法)与其他or()相关联。在您的情况下,您可以轻松地形成您的条件:

Condition c1 = a.equal(query);
Condition c2 = b.equal(query);
Condition c3 = a.equal(query);

Condition d1 = e.equal(query);
Condition d2 = g.equal(query);
Condition d3 = z.equal(query);

现在这些条件可以这样连接:

c1.or(c2).or(c3).and(d1.or(d2).or(d3));

或者输入一个SQL语句:

create.select()
      .from(table)
      .where(c1.or(c2).or(c3)
        .and(d1.or(d2).or(d3)));

当然,您不必将c[1-3], d[1-3]条件分配给变量。您可以将所有内容都内联到一个语句中:

create.select()
      .from(table)
      .where(a.equal(query).or(b.equal(query)).or(a.equal(query))
        .and(e.equal(query).or(g.equal(query)).or(z.equal(query)));

您可以在手册中找到更多信息:

http://www.jooq.org/doc/3.0/manual/sql-building/conditional-expressions/