Tôi hiện đang viết các câu lệnh cập nhật để giữ cho bảng có thể truy vấn được cập nhật liên tục. Giản đồ là giống hệt nhau giữa hai bảng và các nội dung không phải là quan trọng:Cập nhật Oracle SQL dựa trên truy vấn phụ giữa hai bảng
STAGING
ID
NAME
COUNT
PRODUCTION
ID
NAME
COUNT
báo cáo cập nhật của tôi trông như sau:
update PRODUCTION
set name = (select stage.name from staging stage where stage.name=name and rownum <2),
count = (select stage.countfrom staging stage where stage.count=count and rownum <2);
Hai điều đáng chú ý được rằng 1) Có không là mệnh đề where tại kết thúc cập nhật của tôi (điều này có thể là vấn đề) và 2) tất cả các bản ghi sau khi được cập nhật có cùng giá trị. Những gì tôi có ý nghĩa bởi đây là những điều sau đây:
BEFORE UPDATE:
1,"JOHN", 12;
2,"STEVE",15;
3,"BETTY",2;
AFTER UPDATE
1,"JOHN", 12;
2,"JOHN",12;
3,"JOHN",12;
Câu hỏi của tôi là làm thế nào để tôi sửa lỗi này để các bảng đúng phản ánh "mới" dữ liệu từ dàn dựng như một bản cập nhật SQL có đúng không?
CẬP NHẬT
Vì vậy, dữ liệu dàn tôi tình cờ có thể phản ánh những gì có trong PRODUCTION
và vì lợi ích của cuộc thảo luận nó sẽ:
STAGING DATA TO MERGE:
1,"JOHN", 12;
2,"STEVE",15;
3,"BETTY",2;
CẬP NHẬT thứ hai
Các truy vấn mà Tôi muốn chạy sẽ là:
update PRODUCTION
set production.name = staging.name,
production.count = staging.count
where production.name = staging.name;
Tuy nhiên, điều này dẫn đến các vấn đề về số nhận dạng không hợp lệ trên "staging.name"
Bạn có muốn giữ ** tên ** và ** tính ** trong ** SẢN XUẤT ** bảng cập nhật và bảng ** STAGING ** đang thay đổi không? – hmmftg
Tại sao bạn không sử dụng trình kích hoạt để chèn các giá trị mới thay vì cập nhật này? cập nhật này chính xác là gì? – hmmftg
Đồng ý, khi đồng bộ hóa bảng, trình kích hoạt có thể thực sự hữu ích trong việc giữ cho chúng được cập nhật theo thời gian thực. Chỉ cần xem ra để thay đổi các lỗi bảng, và chắc chắn để làm điều đó như là một sau khi INSERT hoặc UPDATE. – Hermit