2017-11-30 22 views
0

Pythonでは、JSONリクエストからデータを取得してデータベースに挿入しますが、挿入する前にこれらのレコードが存在していないことを確認しますそれはそこにある。レコードが存在しない場合(2番目のテーブルからではない)

私は前に尋ねられた同様の質問を知っていますが、私のものは2番目のテーブルからクエリしていないので私とは異なります。だから私はこれにどのようにアプローチするのですか?

私が試した、と私は間違った構文エラーを取得し、

INSERT INTO table (col1, col2, col3) 
VALUES (val1, val2, val3) 
WHERE NOT EXISTS (select col1 FROM table WHERE col1 != val1) 

誰かが私にこの問題にアプローチするより良い方法を与えることができますか?ありがとうございました。

+0

Mergeプロシージャを使用すると、この問題に対する良い解決策が得られます。 –

+0

1行のマージが多すぎるようです。私はいつも@ tab-alleman解決法(下記参照)を1つの挿入に使用しました。 – SmartDev

答えて

2
IF NOT EXISTS(SELECT ...) 
    INSERT ... VALUES ... 
+0

ありがとう! IF NOT EXISTS(WHERE col1 = val1を選択してcol1 FROMテーブルを選択します)INSERT INTO col1、col2、col3 VALUES val1、val2、val3 – Emac

0

また、このような何か行うことができます:はテーブルから選択されていませんどのようにSELECT

INSERT INTO table (col1, col2, col3) 
SELECT val1, val2, val3 
WHERE NOT EXISTS (SELECT 0 FROM table WHERE col1 = val1) 

注意を。条件が成立すれば1行(val1、val2、val3)を返し、そうでなければゼロ行を返します。


ところで、あなたは

INSERT INTO table (col1, col2, col3) 
SELECT val1, val2, val3 
WHERE val1 NOT IN (SELECT col1 FROM table) 

...と、より簡潔にすることをを書く...しかし、NULL値の存在下では、これはnot the exact equivalentであることを注意してくださいすることができます。

+0

これを使用して作業するようにしました。うーん、私はこれをしようとすると、構文エラーが表示されます。私が間違っていることを確信していない。 – Emac

+0

@Emac Whoops、私は '='を(通常はCのような言語のために) '='の代わりに(SQLの要求に応じて)使用しました。 –

関連する問題