gpt4 book ai didi

java - INSERT .. SELECT 使用 JOOQ 在 MySQL 中使用一些默认值

转载 作者:行者123 更新时间:2023-11-29 07:32:41 36 4
gpt4 key购买 nike

假设我有一个表Person(id, fname, lname),它包含一条记录(1, 'Michael', 'Bay')。现在我希望在 Person 表中创建另一条记录,具有相同的 fname 和 lname 但不同的 id,即 (453456, 'Michael', 'Bay')。这是我在纯 SQL 中的做法

INSERT INTO Person(id, fname, lname)
SELECT 453456, Person.fname, Person.lname
FROM Person
WHERE Person.id = 1;

JOOQ 如何做到这一点(理想情况下同时保留 JOOQ 的代码生成和类型安全功能)?

我知道 JOOQ 提供了使用 selectFrom 语法将整个记录从一个表复制到同一个或另一个表的能力

jooq.insertInto(PERSON)
.select(selectFrom(PERSON).where(PERSON.ID.eq(1)))
.execute();

但在我的例子中,记录中只有某些列需要复制,而其余值需要明确设置

我能想到的另一种解决方案如下

jooq.insertInto(PERSON)
.values(452452)
.execute();

jooq.update(PERSON)
.set(row(PERSON.FNAME, PERSON.LNAME),
select(PERSON.FNAME, PERSON.LNAME)
.from(PERSON)
.where(PERSON.ID.eq(1)))
.where(PERSON.ID.eq(452452))
.execute();

但感觉不对。如果有人可以为此问题提供任何其他解决方案/解决方法,我将不胜感激。

最佳答案

jooq.insertInto(PERSON)
.columns(PERSON.ID, PERSON.FNAME, PERSON.LNAME)
.select(select(val(452452), PERSON.FNAME, PERSON.LNAME)
.from(PERSON)
.where(PERSON.ID.eq(1)))
.execute();

一如既往,这是假设以下静态导入:

import static org.jooq.impl.DSL.*;

关于java - INSERT .. SELECT 使用 JOOQ 在 MySQL 中使用一些默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50513519/

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