我有需要從子查詢查詢更新多行(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