sql >> Databáze >  >> RDS >> Oracle

Aktualizujte pomocí Join dotazu v Oracle

Pokud váš SELECT dílčí dotaz vrátí jeden řádek, váš UPDATE příkaz by měl selhat s chybou

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

Obecně platí, že když máte korelovanou aktualizaci, potřebujete nějakou podmínku, která spojuje řádky ve vnější tabulce T1 na řádky ve vnitřním poddotazu, aby bylo zajištěno, že poddotaz vrátí jeden řádek. To by obecně vypadalo nějak takto

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

Nakonec tato UPDATE příkaz aktualizuje každý řádek v T1 . To máš v úmyslu? Nebo chcete aktualizovat pouze řádky, kde například najdete shodu ve vašem dílčím dotazu?



  1. Oracle WITH a MATERIALIZE hint funguje jako autonomní transakce pro funkce

  2. Spojení tří tabulek s jinými spojeními než INNER JOIN

  3. System.Data.OracleClient vyžaduje klientský software Oracle verze 8.1.7 nebo vyšší

  4. Jak použít existující sekvenci Oracle ke generování id v režimu spánku?