【发布时间】:2017-02-14 11:03:05
【问题描述】:
我需要从子选择查询中更新多行 (7) 中的多列 (2)。
这是我目前所拥有的:
UPDATE commandtbl2 t1
SET (attr, attr2) = (
SELECT attr, attr2
FROM commandtbl3 t2
WHERE t1.cmd=t2.cmd
);
但是当我让它运行时,我得到 SQLCODE=-811, SQLSTATE=21000
(UPDATE语句的SET子句中嵌入SELECT语句或子选择的结果是多行表,或者基本谓词的子查询结果多于一个值)
我的错误在哪里?它应该更改 3 行中的 2 列,并保持其他行不变。我只能用SQL所以没有Java、PHP等。
因为这是我在网上找到的 DB2 解决方案,例如:
UPDATE commandtbl2 t1
SET attr = t2.attr, attr2=t2.attr2
FROM commandtbl2 t1
JOIN commandtbl3 t2
ON t1.cmd = t2.cmd ;
或者
UPDATE
commandtbl2 t1
JOIN
commandtbl3 t2 ON t1.cmd=t2.cmd
SET
t1.attr = t2.attr,
t1.attr2=t2.attr2;
不工作但抛出异常。
感谢您的帮助。
流浪汉
【问题讨论】:
-
错误信息非常清楚 - 您一次更新一行,因此子选择必须根据您提供的条件返回单行。找到一种方法来唯一标识
commandtbl3中的行 -
commandtb2 和 commandtbl3 有多少行?您似乎只有几个,所以您可以将这些行编辑到您的问题中以便我们查看它们的值吗?
标签: sql db2 sql-update subquery db2-luw