我有需要从子查询查询更新多行(7)多行(7)的问题。使用子查询查询更新多个行和列
这是我到目前为止有:
UPDATE commandtbl2 t1
SET (attr, attr2) = (
SELECT attr, attr2
FROM commandtbl3 t2
WHERE t1.cmd=t2.cmd
);
然而,当我让那跑,我得到SQLCODE = -811,SQLSTATE = 21000
(嵌入式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;
不工作,但抛出异常。
感谢您的帮助。
TheVagabond
[SQL更新查询使用连接]的可能重复(http://stackoverflow.com/questions/982919/sql-update-query-using-joins) – HoneyBadger
错误消息非常清晰 - 您更新第1行时间,所以在你提供的条件下,子查询必须返回一行。在'commandtbl3'中找到唯一标识行的方法 – mustaccio
commandtb2和commandtbl3中有多少行?看起来你只有几个,所以你可以编辑你的问题的行,以便我们可以看到他们的价值观? – user2338816