查詢中出現了什麼問題? (它無限期執行)在Oracle中使用Join查詢更新
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中使用Join查詢更新
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 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);
最後,UPDATE
語句在T1
更新每一行。那是你的意圖嗎?或者,您是否只想更新哪些行,例如,您在子查詢中找到匹配項?
是的,我需要在子查詢中找到匹配 – DmitryB
是您的更新語句更新了table1中的所有記錄。因爲UPDATE table1沒有WHERE子句 –
你是什麼意思「無限期執行」?它沒有完成,不解析,更新不一致的行或什麼? – Quassnoi
另外,你可以用簡單的英語解釋你的意思是什麼?現在您的子查詢不相關,如果它返回多行,更新將失敗。 – Quassnoi