2012-06-28 2 views
1

Привет я пытаюсь выяснить, как написать что-то подобное в jooqJOOQ вложенного условие

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

Я не могу понять, как сделать вложенное состояние в jooq. Пожалуйста помоги.

ответ

4

Вы должны понять следующую часть 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/

Смежные вопросы