sql >> Databasteknik >  >> RDS >> Oracle

Oracle - uppdatera join - icke nyckelbevarad tabell

Du bör kunna göra detta med en korrelerad underfråga

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

Problemet med UPDATE som du har skrivit är att Oracle inte kan garantera att det finns exakt 1 tbl2.c värde som motsvarar en enda tbl1.b värde. Om det finns flera rader i tbl2 för en viss rad i tbl1 , kommer den korrelerade uppdateringen att ge ett fel som indikerar att en enkelrads underfråga returnerade flera rader. I så fall måste du lägga till lite logik i underfrågan för att ange vilken rad från tbl2 att använda i så fall.



  1. Välj allt före eller efter en viss karaktär i MariaDB

  2. MySQL-pivottabellsfråga med dynamiska kolumner

  3. Exportera MySQL-databas med PHP

  4. Glidande medelvärde baserat på tidsstämplar i PostgreSQL