副選択クエリから複数の行(7)で複数の列(2)を更新する必要があるという問題があります。ここで SQL副選択クエリで複数の行と列を更新する
は、私がこれまで持っているものです。UPDATE commandtbl2 t1
SET (attr, attr2) = (
SELECT attr, attr2
FROM commandtbl3 t2
WHERE t1.cmd=t2.cmd
);
をしかし、私は私が得ること実行させたときにSQLCODE = -811、SQLSTATE = 21000
(埋込みSELECT文または副選択の結果更新声明の設定理由は、1つ以上の行の表であるか、または基本的な予定表のサブキーの結果が1つ以上の値である)
私の誤りはどこですか?それは、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
エラーメッセージはかなり明確です。サブSELECTは、指定した条件を指定して1行を返す必要があります。 'commandtbl3'の行を一意に識別する方法を見つける – mustaccio
commandtb2とcommandtbl3の行数はいくつですか?あなたはいくつかしか持っていないようですので、その値を見ることができるように行をあなたの質問に編集できますか? – user2338816