sql >> Database teknologi >  >> RDS >> Oracle

Opdater med Join-forespørgsel i Oracle

Medmindre din SELECT underforespørgsel returnerer en enkelt række, din UPDATE sætningen skulle mislykkes med fejlen

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

Generelt, hvis du har en korreleret opdatering, har du brug for en betingelse, der relaterer rækker i den ydre tabel T1 til rækker i den indre underforespørgsel for at sikre, at underforespørgslen returnerer en enkelt række. Det ville generelt ligne

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

Til sidst denne UPDATE sætningen opdaterer hver række i T1 . Er det det du har tænkt dig? Eller vil du kun opdatere de rækker, hvor du f.eks. finder et match i din underforespørgsel?



  1. Hent rækken, som har Max-værdien for en kolonne

  2. Sådan klones en bruger i Oracle

  3. Sådan udskiftes en del af en streng i T-SQL

  4. Svarende til varchar(max) i MySQL?