このページでは、ORACLEデータベースのSQLで、条件に一致するレコードが存在しない場合だけ、INSERTする方法を紹介します。
条件に一致するレコードが存在しない場合だけINSERTする方法はいくつかあるので順々に紹介していきます。
INSERT文のサンプルは↓で多数紹介していますので参考にしてください。
>>【SQL】INSERT文の書き方:サンプル多数あり
レコードが存在しない場合だけINSERTする方法
NOT EXISTSを使ってINSERTする方法
条件に一致しない場合によく使うのがNOT EXISTSです。
例えば、TAB2テーブルから、TAB1テーブルにデータを登録するときです。
TAB1テーブルに存在しないデータだけを登録したい場合には、NOT EXISTSを使います。
INSERT INTO tab1(col1,col2)
SELECT
a.col1
,a.col2
FROM
tab2 a
WHERE
NOT EXISTS (SELECT
'x'
FROM
tab1 b
WHERE
a.col1 = b.col1);
MINUS演算子を使ってINSERTする方法
MINUS演算子を使うことで、SELECT結果とSELECT結果の差分を取得することが出来ます。
例えば、Aというテーブルには存在して、Bというテーブルには存在しないデータを抽出することが出来ます。
次のサンプルでは、TAB1テーブルにレコードを登録しています。
TAB2テーブルのSELECT結果から、TAB3テーブルのSELECT結果の差分を取得しています。
つまり登録するデータは、TAB2テーブルに存在するが、TAB3テーブルには存在しないデータになります。
INSERT INTO tab1(col1,col2)
SELECT col1,col2 FROM tab2
MINUS
SELECT col1,col2 FROM tab3;
既に存在するレコードをINSERTした場合
もし誤って主キー項目が一致するレコード、つまり重複レコードのINSERTを行った場合には、SQLエラーになります。
例えば、100万件INSERTする1本のSQLを実行していて、1件でも重複レコードがあると全てエラーになります。
100本のINSERT文をエディタで実行していると、途中でエラーになっても、そのまま後ろのSQLが実行されたりもするので注意が必要です。
まとめ
INSERT文で、レコードが存在しない場合だけINSERTする方法はNOTEXISTSやMINUSを使うことでコーディングすることが出来ます。
このほか、INSERT文には様々な書き方があります。
詳しくは「【SQL】INSERT文の書き方:サンプル多数あり」で解説しているのでぜひ参考にしてください。