2017-02-20 5 views
0

을 jooq 사용하여 하위 쿼리와 함께 삭제 :는 (> listName이 목록 < 문자열입니다) 나는이 SQL 명령을 처리 할 수 ​​jooq 사용하고자하는

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(); 

가 있습니다 :

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) 

내가이 제안을 썼다 정확한 접근법?

답변

1

성명서에 일괄 쿼리가 없습니다. 또한 하위 쿼리에 calendar 테이블을 가입해야하는 이유가 확실하지 않습니다.

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

을 여기에 대안 SQL 쿼리입니다 , 관절은 쓸모가 없다. 귀하의 회신에 감사드립니다. – Fab