假设我有一张table 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();
但感觉不对。如果有人能为这个问题提供任何其他解决方案/解决方法,我将不胜感激。
1条答案
按热度按时间k5ifujac1#
一如既往,这是假设以下静态导入: