将条件列表传递给JOOQ中的WHERE子句

时间:2014-12-05 17:06:21

标签: java mysql jooq

我的问题非常简单,实际上,我只是想知道在使用JOOQ将条件列表传递给WHERE子句时,生成的SQL中使用了什么布尔运算符。

例如:

List<Condition> conditions = new ArrayList<>();
conditions.add(MY_TABLE.MY_COLUMN1.equal("Foo").and(MY_TABLE.MY_COLUMN2.equal("Far"));
conditions.add(MY_TABLE.MY_COLUMN1.equal("Boo").and(MY_TABLE.MY_COLUMN2.equal("Bar"));
DSL.selectFrom(MY_TABLE).where(conditions).fetch();

结果SQL是这样的:

SELECT * FROM MY_TABLE WHERE (MY_COLUMN1='Foo' AND MY_COLUMN2='Far') OR (MY_COLUMN1='Boo' AND MY_COLUMN2='BAR');

或者这个:

SELECT * FROM MY_TABLE WHERE (MY_COLUMN1='Foo' AND MY_COLUMN2='Far') AND (MY_COLUMN1='Boo' AND MY_COLUMN2='BAR');

1 个答案:

答案 0 :(得分:1)

条件为AND - 已连接。虽然SelectWhereStep.where(Condition...)上的Javadoc没有提到这一点(which should be fixed),但基础实现是SelectQuery.addConditions(Condition...)的实现,它指定Operator.AND的使用。

因此得到的查询将是您的第二个例子:

SELECT * FROM MY_TABLE 
WHERE (MY_COLUMN1='Foo' AND MY_COLUMN2='Far') 
  AND (MY_COLUMN1='Boo' AND MY_COLUMN2='BAR');