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

Oracle - aktualizace join - tabulka bez klíčů

Měli byste to udělat pomocí korelovaného poddotazu

UPDATE tbl1 t1
   SET t1.b = (SELECT c
                 FROM tbl2 t2
                WHERE t1.id = t2.id
                  AND t1.a  = t2.a
                  AND t1.b  = t2.b
                  AND t2.d  = 'a')
 WHERE t1.a = 'foo'
   AND EXISTS( SELECT 1
                 FROM tbl2 t2
                WHERE t1.id = t2.id
                  AND t1.a  = t2.a
                  AND t1.b  = t2.b
                  AND t2.d  = 'a')

Problém s UPDATE že jste napsal, že Oracle nemůže zaručit, že existuje přesně 1 tbl2.c hodnota, která odpovídá jedinému tbl1.b hodnota. Pokud je v tbl2 více řádků pro jakýkoli konkrétní řádek v tbl1 , korelovaná aktualizace vyvolá chybu označující, že jednořádkový poddotaz vrátil více řádků. V takovém případě budete muset do poddotazu přidat nějakou logiku, abyste určili, který řádek z tbl2 v takovém případě použít.



  1. Omezte řádky vrácené v dotazu SQL Server pomocí klauzule TOP

  2. MySQL #1140 - Míchání sloupců GROUP

  3. Musí deklarovat skalární proměnnou

  4. Import tvarových souborů do postgresql v linuxu pomocí pgadmin 4