使用 jooq 删除子查询
Delete with subquery using jooq
我想用jooq来处理这条SQL指令(listName是一个List):
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();
这是正确的做法吗?
您的语句中没有涉及批量查询。另外,我不确定为什么您需要在子查询中加入 calendar
table。这是另一个 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.*;
我想用jooq来处理这条SQL指令(listName是一个List
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();
这是正确的做法吗?
您的语句中没有涉及批量查询。另外,我不确定为什么您需要在子查询中加入 calendar
table。这是另一个 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.*;