Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Oracle — aktualizacja dołączenia — tabela niezachowana kluczem

Powinieneś być w stanie to zrobić za pomocą skorelowanego podzapytania

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

Problem z UPDATE napisałeś, że Oracle nie może zagwarantować, że istnieje dokładnie 1 tbl2.c wartość odpowiadająca pojedynczej tbl1.b wartość. Jeśli istnieje wiele wierszy w tbl2 dla dowolnego wiersza w tbl1 , skorelowana aktualizacja zgłosi błąd wskazujący, że jednowierszowe podzapytanie zwróciło wiele wierszy. W takim przypadku musisz dodać trochę logiki do podzapytania, aby określić, który wiersz z tbl2 użyć w takim przypadku.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Reprezentowanie adresów IPv4/IPv6 w Oracle

  2. Konfiguracja połączenia między klientem a serwerem Oracle 10g

  3. Jak utrwalać DUŻE BLOBy (>100 MB) w Oracle przy użyciu Hibernate

  4. Utwórz użytkownika ze zmiennych łańcuchowych w bloku PL/SQL

  5. Różnica między klauzulą ​​WITH a podzapytanie?