JOOQ 删除并加入

Posted

技术标签:

【中文标题】JOOQ 删除并加入【英文标题】:JOOQ delete with join 【发布时间】:2021-03-30 15:29:42 【问题描述】:

如何编写 JOOQ 删除查询以加入来自 with 子句的字段?有可能吗?

我有一个正在运行的 SQL 查询,但我不知道如何将其转换为 JOOQ。

这是我的查询:

with "temp" as (
    select field1 as field1
    from "table"
             join ("table2")
                  on (table.field1 = table2.field2)
)
delete from table using temp
where table.field1 = temp.field1;

我试过了:

transactionDSLContext.with("temp")
dsl.as(
                                    select(TABLE.FIELD1.as("field1"))
                                            .from(TABLE)
                                            .join(TABLE2)
                                            .on(TABLE.FIELD1.eq(TABLE2.FIELD2))

                            )
                            .delete(TABLE)
                            .where(TABLE.FIELD1.eq((Field<String>) temp.field("field1"))
                            .execute();

但我得到了:

ERROR: missing FROM-clause entry for table "temp"

【问题讨论】:

【参考方案1】:

你忘记了using 子句:

.delete(TABLE).using(temp)

我假设您有一个局部变量 temp,您在其中分配了您的 CommonTableExpression...

【讨论】:

我没有它作为一个选项...只有 delete(TABLE).where(...) 嗯,它是在 jOOQ 3.13 中添加的:jooq.org/api-diff/3.12-3.13

以上是关于JOOQ 删除并加入的主要内容,如果未能解决你的问题,请参考以下文章

多个存储库上的 JOOQ @Transactional

jOOQ - 加入嵌套子查询

新的 Flyway 迁移破坏了现有的 jOOQ 生成的代码

加入 jOOQ 时无法获取我的 SpeakerRecord 实体

如何使用 discord.py 机器人,在他们加入 VC 时赋予用户角色并在他们离开时将其删除

集合操作 用单链表模拟有序集合,实现集合的加入一个元素、删除一个元素、集合的交、并、差运算。