【发布时间】:2012-11-24 10:35:25
【问题描述】:
我有以下表格需要合并:
表 1:
主键 | sec_key |旧号码 |变量1 |变量2
1 | A | 5 | AA | 11
1 | B | 8 | BB | 22
表 2:
主键 |新号码 |变量1 |变量2
1 | 2 | DD | 44
1 | 3 | EE | 55
1 | 7 | FF | 66
我无法修改表(没有插入,因此我不能使用“合并”,只能使用 UNION)。
两个表都包含大量数据,我需要最有效的方法来合并它们。
- 合并应该根据main_key,对于table1.sec_key中的每一个,
- 如果table2.new_number
另外,应该有一行原始 table1 值与 old_number。
例子:
- 对于第一个 table1.sec_key:它的 old_number 是 5。
- table2.new_number '2' 小于 5,table2.new_number '3' 也小于 5 但 table2.new_number '7' 大于 5
- 因此输出将包括 old_numbers 以及 new_number=2 和 new_number=3 的行:
(其余的 sec_keys 和其他 main_keys 中的所有其他 sec_keys 也是如此。
示例的预期输出表:
main_key | sec_key | number | var1 | var2
1 | A | 5 | AA | 11
1 | A | 2 | DD | 44
1 | A | 3 | EE | 55
1 | B | 8 | BB | 22
1 | B | 2 | DD | 44
1 | B | 3 | EE | 55
1 | B | 7 | FF | 66
我考虑过使用 UNION 或加入,但不确定如何执行此操作并为每个 sec_key 保留 table1 中的原始行。
我的问题是 main_key 不是唯一键。 我也考虑过使用 CTE,但不确定它在这里是否有用。
【问题讨论】:
-
为什么 B 出现 4 次,而 A 只出现 3 次预期输出?
-
因为与B关联的old_number(在table1中)大于table2中的所有3个new_numbers,但A的old_number仅大于table2中的2个new_numbers
标签: sql sql-server-2012 bigdata