[英]JOOQ insert into select syntax with specified columns
JOOQ可以對指定的列執行“插入選擇”語法嗎? 我進行了幾次嘗試。
表格:
table1(預期插入)
id column1 column2 column3 ... timestamp 1 John Leo null 2012/1/28 23:32:23 (Expected insert)
表2
id col1 col2 col3 101 John xxx xxx (from table2.col1) 102 xxx xxx xxx
表3
id col1 col2 col3 101 xxx Leo xxx (from table3.col2) 102 xxx xxx xxx
INSERT INTO table1 ( column1, column2 )
SELECT table2.col1, table3.col2
FROM table2 join table3 t3 on table2.id = table3.id
where table2.id = 101;
JOOQ代碼:
create.insertInto(table1, column1, column2 )
.values( create.select( table2.col1, table3.col2 )
.from(table2)
.join(table3)
.on( table12.id.equal(table3.id) )
.where( table2.id.equal(101) ))
.execute(); //.getSQL();
JOOQ顯示錯誤消息:
The number of values must match the number of fields
任何人都知道我遇到了什么問題以及如何解決我的JOOQ代碼。 謝謝,付錢。
您使用的是INSERT .. VALUES
語法,而不是INSERT .. SELECT
語法。 您的子查詢提供了column1
值,但您沒有為column2
提供任何值。 手冊“示例:INSERT SELECT語法支持”中進一步介紹了您要執行的操作。 在您的情況下,這將顯示為(jOOQ 2.x語法,在jOOQ 3.x中不再可用):
create.insertInto(table1,
create.select( table2.col1, table3.col2 )
.from(table2)
.join(table3)
.on( table12.id.equal(table3.id) )
.where( table2.id.equal(101) ))
.execute(); //.getSQL();
或使用自定義投影(jOOQ 3.x語法):
create.insertInto(table1, column1, column2)
.select(create.select(...))
.execute();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.