31

時々データセットで更新されるデータベースがあります。ここで、データベースに既に存在するデータセットが配信されることがあります。

現在、私は最初にやっています

SELECT FROM ... WHERE val1=... AND val2=...

これらのデータを含むデータセットが既に存在するかどうかを確認します (WHERE ステートメントのデータを使用)。これが値を返さない場合は、INSERT を実行しています。

しかし、これは私にとって少し複雑なようです。私の質問: 存在しない場合にのみ新しいデータセットを追加する何らかの条件付き INSERT はありますか?

私はSmallSQLを使用しています

4

6 に答える 6

36

ほぼすべてのリレーショナル データベースで、単一のステートメントとサブクエリを使用してこれを行うことができます。

INSERT INTO targetTable(field1) 
SELECT field1
FROM myTable
WHERE NOT(field1 IN (SELECT field1 FROM targetTable))

あなたが説明することはかなり一般的なタスクであるため、特定のリレーショナルデータベースでは上記の構文が改善されています。SQL Server にはMERGEあらゆる種類のオプションを含む構文があり、MySQL にはオプションのINSERT OR IGNORE構文があります。

編集: SmallSQL のドキュメントは、SQL 標準のどの部分が実装されているかについてはかなりまばらです。サブクエリを実装していない可能性があるため、SmallSQL に固執する必要がある場合、上記のアドバイスやその他のアドバイスに従うことができない場合があります。

于 2013-05-19T16:19:03.177 に答える
0

"アップサート" を行う場合、現在 SQL Server で単一行を処理する最も効率的な方法の 1 つは次のとおりです。

UPDATE myTable ...


IF @@ROWCOUNT=0
    INSERT INTO myTable ....

MERGE単一の行ではなくデータのセットでこれを行う場合は、構文を使用することもできます。

したくINSERTないUPDATE場合は、単一のINSERTステートメントを記述して使用できますWHERE NOT EXISTS (SELECT ...)

于 2013-05-19T16:19:02.987 に答える
0

通常、重複したくないものを一意にし、データベース自体が挿入を拒否できるようにします。

それ以外の場合は、INSERT INTO を使用できます。SQL Server の INSERT INTO SELECT クエリで重複を回避する方法を参照してください。

于 2013-05-19T16:16:56.030 に答える