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

Ai đó có thể giải thích câu lệnh MERGE thực sự làm gì trong Oracle không?

loại tham gia được thực hiện? Tôi nghĩ đó là sự tham gia bên ngoài đầy đủ, tôi ổn chứ?

Không, đó là một tham gia bên ngoài thông thường. Truy vấn cần biết khi nào có các hàng trong bảng đích cũng có trong bảng nguồn và khi nào có các bản ghi trong bảng nguồn không có trong bảng đích. Vì truy vấn không cần trả lời các hàng có trong bảng đích nhưng không có trong bảng nguồn, nên nó không cần kết nối bên ngoài để thực hiện cả hai cách.

Tuy nhiên, phép nối bên ngoài sẽ không được thực hiện nếu không có not matched mệnh đề (hoàn toàn hợp lệ). Trình tối ưu hóa đủ thông minh để biết rằng trong trường hợp đó, một phép nối bên trong là đủ.

liên quan đến phần WHEN MATCHED:điều gì sẽ xảy ra khi một hàng từ t khớp với nhiều hàng từ s?

Khi có nhiều trận đấu, cập nhật sẽ được thực hiện cho mỗi trận đấu. Điều này có nghĩa là bất kỳ cập nhật nào đến sau cùng sẽ là cập nhật được ghi trong cam kết. Không có cách nào để ra lệnh, vì vậy trong trường hợp này, nguồn của bản cập nhật thực sự là ngẫu nhiên (từ tập hợp các kết quả phù hợp).

Như @ Vincent Malgrat đã chỉ ra, điều này không chính xác. Có vẻ như Oracle sẽ tạo ra lỗi "ORA-40926:không thể có được một tập hợp các hàng ổn định trong bảng nguồn" nếu có nhiều kết quả trùng khớp.

về phần WHEN NOT MATCHED Tôi tin rằng nó có nghĩa là “khi một hàng trong s không tương ứng trong t”. Tôi nói đúng chứ?

Điều đó đúng.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Hàm REMAINDER () trong Oracle

  2. Chọn một mẫu kết quả ngẫu nhiên từ kết quả truy vấn

  3. Làm thế nào để loại bỏ tất cả các bảng người dùng?

  4. Làm thế nào để trả về một RefCursor từ hàm Oracle?

  5. ORA-00984:cột không được phép ở đây