gpt4 book ai didi

java - 使用 JOOQ 在 "not in"子句中指定多个列进行删除

转载 作者:行者123 更新时间:2023-11-29 11:55:03 24 4
gpt4 key购买 nike

我想将一个 postgres 数据库表与 Jooq 记录列表同步。

我有一个表,每行有一个复合主键和三个其他值

table(k1, k2, v1, v2, v3)

例如,数据可能是

Last, First, Age, Weight, Height
Smith, Joe, 21, 75, 160
Jones, Pete, 23, 80, 180

(请原谅使用名称作为主键的糟糕形式....)

我的 java 代码中还有该表的 Jooq 记录列表。假设有两条 java 记录

[
<Smith, Joe, 21, 75, 180>,
<Taylor, Mark, 54, 90, 170>
]

我希望发生的是当我运行一些代码时,

  • Joe Smith 的数据库行的高度已更新
  • 为 Mark Taylor 插入了一个新行
  • Pete Jones 的数据库行已删除

我已经成功地创建了一个函数来完成前两部分,但我卡在了第三部分。我希望在 JOOQ 中有一个非常简单的“one liner”,基本上可以做到这一点

delete 
from my_table
where (first, last) not in (values ('Joe', 'Smith'), ('Mark', 'Taylor'))

但我无法计算出相应的 Java 代码来执行此操作。

有没有 Jooq 大师在读这篇文章?

我是否忽略了一个明显的东西?

最佳答案

您的查询可以转换为以下 jOOQ 代码:

// Assuming this:
import static org.jooq.impl.DSL.*;

using(configuration)
.deleteFrom(MY_TABLE)
.where(row(MY_TABLE.FIRST, MY_TABLE.LAST).notIn(
row("Joe", "Smith"),
row("Mark", "Taylor")
))
.execute();

这是使用 DSL.row()构造行值表达式。请注意,ROW 是 PostgreSQL 中的可选关键字。您只是碰巧在 SQL 示例中忽略了它。

另请参阅手册中有关度 > 1 的 IN 谓词的部分:

http://www.jooq.org/doc/latest/manual/sql-building/conditional-expressions/in-predicate-degree-n

关于java - 使用 JOOQ 在 "not in"子句中指定多个列进行删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40213470/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com