sql >> Database >  >> RDS >> Oracle

Oracle - update join - tabel zonder sleutelbehoud

Je zou dit moeten kunnen doen met een gecorreleerde subquery

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

Het probleem met de UPDATE dat u hebt geschreven is dat Oracle niet kan garanderen dat er precies 1 tbl2.c . is waarde die overeenkomt met een enkele tbl1.b waarde. Als er meerdere rijen zijn in tbl2 voor een bepaalde rij in tbl1 , zal de gecorreleerde update een fout genereren die aangeeft dat een subquery met één rij meerdere rijen heeft geretourneerd. In dat geval moet u wat logica aan de subquery toevoegen om aan te geven welke rij uit tbl2 om in dat geval te gebruiken.



  1. NAMEN INSTELLEN utf8 in MySQL?

  2. Hoe de primaire sleutelduplicatie van een SQL Server 2008-foutcode te identificeren?

  3. MariaDB GROUP_CONCAT()

  4. Keer in Oracle dit pad z/y/x om naar x/y/z