Aggiorna con la query di Join in Oracle

cosa c’è di sbagliato nella query? (Esegue a tempo indeterminato)

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); 

Mi aiuti per favore.

La tua query non ha molto senso con i riferimenti generici table1, table2 e join_key.

Se questo non è quello che stai cercando, sarebbe utile avere alcuni dati di esempio per avere una migliore idea di quali risultati stai cercando.

 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); 

A meno che la sottoquery SELECT restituisca una singola riga, l’istruzione UPDATE non dovrebbe riuscire con l’errore

 ORA-01427: single-row subquery returns more than one row 

Generalmente, si ha un aggiornamento correlato, è necessaria una condizione che colleghi le righe nella tabella esterna T1 alle righe nella sottoquery interna per garantire che la sottoquery restituisca una singola riga. Questo in genere somiglia a qualcosa

 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); 

Infine, questa istruzione UPDATE sta aggiornando ogni riga in T1 . È questo che intendi? O vuoi solo aggiornare le righe dove, ad esempio, trovi una corrispondenza nella tua sottoquery?