マージする必要がある次のテーブルがあります。
表1:
メインキー | sec_key | 古い番号 | var1 | var2
1 | A | 5 | AA | 11
1 | B | 8 | BB | 22
表 2:
メインキー | new_number | var1 | var2
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.var1、table1.var2 の値を対応する値 table2.var1 および table2.var2 に更新します。
また、old_number を持つ元の table1 値の行があるはずです。
例:
- 最初の 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 についても同じことが言えます。
例の期待される output_table:
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 または join のいずれかを使用することを考えましたが、これを行う方法と、各 sec_key の table1 からの元の行を保持する方法がわかりません。
私の問題は、main_key が一意のキーではないことです。CTE の使用も検討しましたが、ここで役立つかどうかはわかりません。