複数列をキーにしている場合、IN()は使えないのでexistsを使う。
where not exists ()の中で「SELECT *」を指定していますがあまり意味はなく、アーカイブテーブルと本テーブルのテーブル定義が違っていてもexists()は使えます。
今回サンプルとしたtSecテーブルは、[CurrencyNo]と[DateAndTime]の2列が主キーでした。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
SELECT * FROM FX_ACV.hstr.tSec as a where not exists ( SELECT * FROM FX.hstr.tSec as b where ( a.[CurrencyNo] = b.[CurrencyNo] and a.[DateAndTime] = b.[DateAndTime] ) ) |
アーカイブDBに有って本DBには無いデータを全て、本DBへInsertするSQLはこんな感じ。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
INSERT INTO FX.hstr.tSec (CurrencyNo, DateAndTime, BuyRate, ShellRate) SELECT CurrencyNo, DateAndTime, Rate_Buy, Rate_Shell FROM FX_ACV.hstr.tSec as a where not exists ( SELECT * FROM FX.hstr.tSec as b where ( a.CurrencyNo = b.CurrencyNo and a.DateAndTime = b.StartDate ) ) |
コメント