DB2 INSERT INTO SELECT语句将行复制到同一个表中,不允许多行

DB2 INSERT INTO SELECT语句将行复制到同一个表中,不允许多行,db2,sql-insert,self-join,Db2,Sql Insert,Self Join,几天来,我一直在寻找这个问题的答案,但找不到任何与这个具体问题相关的答案 首先,如果我想使用INSERT INTO SELECT语句复制一个表的行,返回到同一个表中,但修改了新id和列的1,那么它是否有效 例如: INSERT INTO TABLE_A (column1, column2, column3) SELECT column1, 'value to change', column3 from TABLE_A where column 2 = 'original value'; 在DB

几天来,我一直在寻找这个问题的答案,但找不到任何与这个具体问题相关的答案

首先,如果我想使用INSERT INTO SELECT语句复制一个表的行,返回到同一个表中,但修改了新id和列的1,那么它是否有效

例如:

INSERT INTO TABLE_A (column1, column2, column3) SELECT column1, 'value to change', column3 from TABLE_A where column 2 = 'original value';
在DB2数据库上尝试此操作时,出现以下错误:

无效的多行插入。SQLCODE=-533,SQLSTATE=21501,DRIVER=4.18.60

如果我运行相同的语句,但在select语句中放入了要返回的特定ID,确保只返回1行,那么该语句就可以工作。但这与我试图做的相反,我要做的是将同一个表中的多行复制到它自己,同时将特定列更新为新值


谢谢大家

您没有提到您的平台和版本,但文档似乎很清楚

向自引用表中插入多行无效

具有子选择的插入操作试图插入多行 输入到自引用表中。插入操作的子选择 应返回不超过一行的数据。系统操作:插入 语句无法执行。对象表的内容如下所示: 不变。程序员响应:检查 子选择以确保选择的数据不超过一行

编辑显然,表上有一个自引用约束。Ex:EMPLOYEES表,其经理列定义为FK自引用回EMPLOYEES表

Db2根本不支持您正在尝试做的事情

您需要创建一个临时表来保存修改后的行


或者,假设您的表有主键,尝试改用
MERGE
语句

它在DB211.1.4.0上运行良好,没有错误

CREATE TABLE TABLE_A( column1 int , column2 varchar(16), column3 int)

INSERT INTO TABLE_A values (1,'original value',3)

INSERT INTO TABLE_A (column1, column2, column3)
SELECT column1, 'value to change', column3 from TABLE_A where column2 = 'original value'

SELECT * FROM TABLE_A
返回

COLUMN1|COLUMN2        |COLUMN3
-------|---------------|-------
      1|original value |      3
      1|value to change|      3

也许有些事情你没有告诉我们……

“第一次谷歌搜索结果”并不总是最好的选择。SQLCODE=-533forDB2(LUW)的官方手册页是,这是一个与您所看到的稍有不同的错误quoted@PaulVernon我确实包含了一个指向官方Db2文档的链接(基于SQLSTATE而不是SQLCODE。它们都是一样的。对不起,Charles,我的眼睛跳过了“第一个google结果”在你的帖子中,我错过了第一个链接。我不确定该网站的真实性。它在首页上说:“这是一项免费服务。我不保证印刷错误,也不保证信息和条目的正确性和完整性。”,但在解释服务实际是什么方面没有太多的内容。阅读文档,当表上存在自引用约束时会发生错误。OP没有提到。@Charles link。它在Db2 for LUW上运行良好。TS可能应该描述他/她是如何得到这样一个错误的。同意。我希望OP可以接受hi我自己没有时间尝试根据表格上的自参考约束来重现错误,希望OP能够处理