我有两个跟踪数据库值更改的历史表,使用修订 ID 来跟踪各个更改。例如
表格1:
rev | A | B
=================
1 | 100 | 'A'
4 | 150 | 'A'
7 | 100 | 'Z'
表 2:
rev | C | D
==================
1 | 200 | True
5 | 0 | True
8 | 0 | False
目标是将这两个表合并为:
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
这个想法是,对于给定的修订,我会采用与该修订相对应的值或低于它的最高修订。
想到的 SQL 查询类似于使用约束rev1 < rev2交叉连接两个表,然后使用子查询选择行,其中rev1 = max(rev1)对于每个给定的rev2;将此查询与其对应的交换rev2和rev1联合;最后从rev1 = rev2中过滤掉重复项。
问题是:
- 这种类型的连接有名称吗?
- 是否有在 SQL 中执行这种类型的连接的习惯用法,或者以编程方式执行它会更好(这肯定会更简单并且可能更有效)?