クエリで何が間違っていますか? (無期限に実行します)Oracleの結合クエリで更新します
UPDATE table1 t1 SET (t1.col,t1.Output) = (
SELECT t2.col, t3.Output + t2.col
FROM tabl2 t3
LEFT JOIN table1 t2 ON t3.Join_Key = t2.Join_Key
WHERE t2.col is not NULL);
私を助けてください。
クエリで何が間違っていますか? (無期限に実行します)Oracleの結合クエリで更新します
UPDATE table1 t1 SET (t1.col,t1.Output) = (
SELECT t2.col, t3.Output + t2.col
FROM tabl2 t3
LEFT JOIN table1 t2 ON t3.Join_Key = t2.Join_Key
WHERE t2.col is not NULL);
私を助けてください。
クエリは、一般的なtable1、table2、およびjoin_keyの参照ではあまり意味がありません。
これがあなたが探しているものでない場合は、探している結果をよりよく知るためのサンプルデータがあると便利です。
update table1 t1
set t1.col = (select t2.col
from table2 t2
where t1.join_key = t2.join_key(+)
and t1.col is not null),
t1.output = (select t2.output + t1.col
from table2 t2
where t1.join_key = t2.join_key(+)
and t1.col is not null);
あなたSELECT
サブクエリが単一の行を返していない限り、あなたのUPDATE
ステートメントがエラー一般
ORA-01427: single-row subquery returns more than one row
、あなたは相関アップデートを持っているホエーで失敗する必要があり、あなたはT1
に外部表内の行に関するいくつかの条件が必要サブクエリが単一の行を返すことを保証するために、内部サブクエリの行を削除します。これは、一般的に、このUPDATE
文がT1
内のすべての行を更新して、最後に
UPDATE table1 t1 SET (t1.col,t1.Output) = (
SELECT t2.col, t3.Output + t2.col
FROM tabl2 t3
LEFT JOIN table1 t2 ON t3.Join_Key = t2.Join_Key
WHERE t2.col is not NULL
AND t1.some_key = t2.some_key);
ようになります。それはあなたの意図ですか?または、たとえば、サブクエリで一致する行を更新するだけですか?
はい、サブクエリ – DmitryB
で一致するものを見つけるには、更新ステートメントがtable1のすべてのレコードを更新する必要があります。 WHERE句のないUPDATE table1 –
「無限に実行する」とはどういう意味ですか?それは完了しません、解析しない、更新された不整合行または何ですか? – Quassnoi
また、達成するために何を意味したのか、簡単に説明してください。現在のサブクエリは相関関係になく、複数の行を返すと更新は失敗します。 – Quassnoi