我有一个名为 result 的表,它没有主键(无法更改)。我想使用 Jooq 更新满足特定条件的所有记录。以下代码无法按我的预期工作。它插入新记录而不是更新现有记录,我不明白。
public Mono<Result> update(Result result, String name) {
return Mono.from(ctx.update(RESULT)
.set(RESULT.STATUS, result.getStatus())
.where(RESULT.NAME.eq(name))
.returning()
)
.map(r -> r.into(Result.class));
jOOQ 3.18 在 MariaDB 10.5 中引入了
UPDATE .. RETURNING
的模拟,它本身不支持此语法:
简而言之,这种说法:
UPDATE t
SET a = b
WHERE p
ORDER BY o
LIMIT l
RETURNING x;
可以模拟如下:
INSERT INTO t
SELECT * FROM t WHERE p ORDER BY o LIMIT l
ON DUPLICATE KEY UPDATE SET a = b
RETURNING x;
但显然,这假设存在可以通过
ON DUPLICATE KEY
子句匹配的主键(或唯一键)。