次のような2つのテーブルがあります。
TABLE1:
=======
somid, tobeupdated
1 , null
2 , null
3 , null
10 , null
TABLE2:
=======
rangeofids
2
3
9
10
11
12
13
次の基準に基づいて、TABLE1.tobeupdated を更新する必要があります (または、値が必要であることがわかりました)。
- の場合
TABLE1.somid NOT exists in TABLE2.rangeofids
、期待される結果は次のとおりです。TABLE1.somid
- そうでない場合は、次の使用可能な (または未使用の)
TABLE2.rangeofids
より大きいものを見つけます。TABLE1.somid
したがって、期待値は次のとおりです。bu
TABLE1:
=======
somid, tobeupdated
1 , 1
2 , 4
3 , 4
10 , 14
私は懸命に努力しましたが、思いついた最も簡単な解決策は、ID の完全なシーケンス ( から1
までmax(rangeofids)+1
)を含む一時テーブルを作成するMINUS TABLE2.rangeofids
ことMIN(TMPTABLE.id) where TMPTABLE.ID > TABLE1.somid
です。
しかし、(一時テーブルなしで) より良い解決策はありませんか?
注:プロシージャ/関数などを作成できないため、標準(Oracle 10)SQLである必要があります。