Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Oracle - tham gia cập nhật - bảng không lưu giữ khóa

Bạn có thể thực hiện việc này với một truy vấn con có liên quan

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

Sự cố với UPDATE mà bạn đã viết là Oracle không thể đảm bảo rằng có chính xác 1 tbl2.c giá trị tương ứng với một tbl1.b giá trị. Nếu có nhiều hàng trong tbl2 cho bất kỳ hàng cụ thể nào trong tbl1 , bản cập nhật tương quan sẽ gây ra lỗi cho biết rằng một truy vấn con một hàng trả về nhiều hàng. Trong trường hợp đó, bạn cần thêm một số logic vào truy vấn con để chỉ định hàng nào từ tbl2 để sử dụng trong trường hợp đó.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. An toàn TO_NUMBER ()

  2. Truy vấn con trong câu lệnh select hoạt động như thế nào trong oracle

  3. Bản dịch Microsoft T-SQL sang Oracle SQL

  4. Chèn nhiều hàng với trình tự trong Oracle

  5. Cách định dạng số bằng dấu trừ / dấu cộng trong Oracle