Tôi có hai bảng lịch sử theo dõi các thay đổi trong giá trị cơ sở dữ liệu, sử dụng id sửa đổi để theo dõi các thay đổi riêng lẻ. ví dụ.Hợp nhất hai bảng theo dõi phiên bản trong khi điền các giá trị
Bảng 1:
rev | A | B
=================
1 | 100 | 'A'
4 | 150 | 'A'
7 | 100 | 'Z'
Bảng 2:
rev | C | D
==================
1 | 200 | True
5 | 0 | True
8 | 0 | False
Mục tiêu sẽ được sáp nhập hai bảng vào:
rev | A | B | C | D
===============================
1 | 100 | 'A' | 200 | True
4 | 150 | 'A' | 200 | True
5 | 150 | 'A' | 0 | True
7 | 100 | 'Z' | 0 | True
8 | 100 | 'Z' | 0 | False
Ý tưởng được rằng cho cho một định sửa đổi, tôi sẽ lấy các giá trị tương ứng với bản sửa đổi đó hoặc bản sửa đổi cao nhất ít hơn.
Truy vấn SQL mà nói đến cái tâm sẽ là một cái gì đó giống như qua tham gia hai bảng với chế REV1 < rev2, sau đó chọn hàng sử dụng một subquery nơi REV1 = max (REV1) cho từng đưa rev2 ; kết hợp truy vấn này với đối tác của nó trao đổi rev2 và rev1; và cuối cùng lọc ra các bản sao từ nơi rev1 = rev2.
Các câu hỏi là:
- Có một tên cho loại tham gia?
- Có thành ngữ nào để thực hiện kiểu tham gia này trong SQL hay tốt hơn nếu thực hiện theo chương trình (điều này chắc chắn sẽ đơn giản hơn nhiều và có thể hiệu quả hơn)?
RDBMS gì? Một số có hỗ trợ cho các loại hoạt động, vì vậy (đặc biệt là nếu không gian dữ liệu lớn) điều này thực sự có thể hiệu quả hơn trong cơ sở dữ liệu. –
Vì vậy, bạn không muốn truy vấn mà chỉ là câu trả lời cho hai câu hỏi đó? –
Cơ sở dữ liệu là PostgreSQL, mặc dù về mặt kỹ thuật, công việc được cho là độc lập với DB (thực tế điều này sẽ không xảy ra). Và vâng, chỉ cần quan tâm đến câu trả lời cho các câu hỏi, trừ khi có một truy vấn đơn giản hơn nhiều mà tôi đang xem. –