使用 VALUES() 插入时如何在 jOOQ 中指定行别名

问题描述 投票:0回答:1

在 MySQL 8 中,在插入值以在

ON DUPLICATE KEY UPDATE
语句中引用它时可以指定行别名,如下所示:

INSERT INTO foo (id, col1, col2) 
VALUES(123, 'foo', 'bar'), (321, 'bar', 'baz') as new_row
ON DUPLICATE KEY UPDATE col1 = new_row.col1, col2 = new_row.col2

这将替换旧的

VALUES()
功能,请参阅 https://dev.mysql.com/worklog/task/?id=13325

不幸的是,我无法在 jOOQ 中编写此查询,因为

InsertValuesStep
不允许我指定别名。是否有其他可能添加此别名,例如使用普通 SQL DSL?

mysql jooq
1个回答
0
投票

jOOQ 不通过 API 支持这种特定的 MySQL 特定语法,但您可以使用 PostgreSQL 特定的

EXCLUDED
伪表 来实现此目的。此用法也应记录在手册中,请参阅#15999。因此,假设您至少使用 jOOQ 3.17,请编写:

ctx.insertInto(FOO)
   .columns(FOO.ID, FOO.COL1, FOO.COL2)
   .values(123, "foo", "bar")
   .values(321, "bar", "baz")
   .onDuplicateKeyUpdate()
   .set(FOO.COL1, excluded(FOO.COL1))
   .set(FOO.COL2, excluded(FOO.COL2))
   .execute();

使用这种方法,您无法为您的

VALUES()
子句指定一个明确的名称,但这实际上并不是必需的。

© www.soinside.com 2019 - 2024. All rights reserved.