使用带有IN子句的jooq条件

时间:2016-01-29 18:21:22

标签: java sql jooq

假设我有2个参数, firstname lastname ;其中至少有一个已经确定。

我想要做的是构建一个 jooq 查询,用 firstname 和/或 lastname 删除一些记录(来自表)存储在另一个表中。 所以基本上我有三种可能性:

DELETE FROM table1
    WHERE table1.id IN
        (SELECT id FROM table2 WHERE table2.firstname LIKE 'fname');

DELETE FROM table1
    WHERE table1.id IN
        (SELECT id FROM table2 WHERE table2.lastname LIKE 'lname');

DELETE FROM table1
    WHERE table1.id IN
        (SELECT id FROM table2 WHERE table2.firstname LIKE 'fname' AND table2.lastname LIKE 'lname');

知道如何使用 jooq条件吗? 我总是可以执行2个查询(一个用于从table2中选择ID,另一个用于删除),但我想一步完成。

感谢。

LE 我想用jooq在Java代码中表达这些语句:首先创建一个 jooq条件,具体取决于设置的参数,然后使用 delete 语句中的条件

1 个答案:

答案 0 :(得分:1)

假设:

import static org.jooq.impl.DSL.*;

写:

Condition condition = falseCondition();

if (firstnameIsSet)
    condition = condition.or(TABLE2.FIRSTNAME.like(firstname));

if (lastnameIsSet)
    condition = condition.or(TABLE2.LASTNAME.like(lastname));

DSL.using(configuration)
   .deleteFrom(TABLE1)
   .where(TABLE1.ID.in(
        select(TABLE2.ID)
       .from(TABLE2)
       .where(condition)
   ))
   .execute();