Oracle
 sql >> база данни >  >> RDS >> Oracle

Oracle - присъединяване към актуализиране - таблица без ключ

Трябва да можете да направите това с корелирана подзаявка

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

Проблемът с UPDATE което сте написали е, че Oracle не може да гарантира, че има точно 1 tbl2.c стойност, която съответства на единичен tbl1.b стойност. Ако има няколко реда в tbl2 за всеки конкретен ред в tbl1 , свързаната актуализация ще изведе грешка, показваща, че едноредова подзаявка е върнала няколко реда. В този случай ще трябва да добавите някаква логика към подзаявката, за да посочите кой ред от tbl2 да се използва в този случай.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. алтернатива на listagg в Oracle?

  2. ORA-00932:непоследователни типове данни:очаквано - получих CLOB

  3. Функция TRUNC(дата) в Oracle

  4. Функция ROUND(дата) в Oracle

  5. Тип дата без час в Oracle