2017-02-20 331 views
0

我想用jooq处理这个SQL指令(LISTNAME是一个List <字符串>):与子查询删除使用jooq

DELETE FROM table_calendar cal 
WHERE cal.client_id 
IN (
SELECT client.id FROM table_client client 
JOIN cal 
ON cal.client_id = client.id 
WHERE client.name = :listName) 

我写了这个提议:

SelectConditionStep<Record1<String>> res = create.select(CALENDAR.CLIENT_ID) 
         .from(CALENDAR) 
         .join(CLIENT) 
         .on(CLIENT.ID.eq(CALENDAR.ID)) 
         .where(CLIENT.NAME.in(listName)); 

    Query deleteQuery = create.delete(CALENDAR) 
        .where(CALENDAR.ID.in(res.getBindValues())); 

    create.batch(deleteQuery).execute(); 

是一个正确的方法?

回答

1

您的声明中没有涉及批处理查询。另外,我不确定为什么你需要加入子查询中的calendar表。这里有一个替代SQL查询:

DELETE FROM calendar 
WHERE client_id IN (
    SELECT client.id 
    FROM client 
    WHERE client.name = :listName 
) 

它转换为以下jOOQ查询

create.delete(CALENDAR) 
     .where(CALENDAR.CLIENT_ID.in(
      select(CLIENT.ID) 
      .from(CLIENT) 
      .where(CLIENT.NAME.eq(listName)) 
    )) 
     .execute(); 

以上jOOQ查询(一如既往)假设你是静态导入此:

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

是,联合是无用的。感谢您的答复 – Fab