小编典典

jOOQ-多字段插入

sql

我想表达以下INSERT声明:

context.insertInto(TABLE A)
   .set(<FIELD A, FIELD B>, context.select(FIELD A, FIELD B).from(B).where(...))
   .set(... other field of table A ...)
   .set(... other field of table A ...)
   .set(... other field of table A ...)
   .returning()
   .fetch()

子选择返回一行,其中包含两列(FIELD AFIELD B),需要将其插入到target中TABLE A。这样做的原因是,<FIELD A, FIELD B>是的主键TABLE BTABLE A是指TABLE B(外键)。

这可能吗?


阅读 167

收藏
2021-04-28

共1个答案

小编典典

我不确定首先使用哪种SQL方言是否可能通过INSERT .. VALUES,但是您当然可以使用INSERT .. SELECT以下方式表达这种查询:

INSERT INTO a (a, b, x, y, z)
SELECT a, b, ... other value ..., ... other value ..., ... other value ...
FROM b
WHERE ...
RETURNING *;

或与jOOQ

context.insertInto(TABLE A, ... columns ...)
       .select(
           select(
               FIELD A, 
               FIELD B,
               ... other field of table A ...,
               ... other field of table A ...,
               ... other field of table A ...)
          .from(B)
          .where(...))
       )
       .returning()
       .fetch()
2021-04-28