ブラックボックス

プログラミングのノウハウやライフハックをどんどん投稿していきたい

Jul 9, 2013 - 1 minute read - ノウハウ

【PostgreSQL】レコードが存在すればUPDATE、なければINSERTをSQL文で実現する

(2017/07/25追記)
1クエリで実現する方法を書きました。
【PostgreSQL】レコードが存在すればUPDATE、なければINSERTを1クエリで実現する


いちいちSELECTしてきて、とってきた値を検証してSQL文を生成しなおして、
これじゃ面倒なので、SQL文だけでなんとかならないか調べることに。

参考
http://stackoverflow.com/questions/11135501/postgresql-update-if-row-with-some-unique-value-exists-else-insert

英語はあまり分からないですが、コードから読み解く。

UPDATE table SET field='C', field2='Z' WHERE id=3;
INSERT INTO table (id, field, field2)
       SELECT 3, 'C', 'Z'
       WHERE NOT EXISTS (SELECT 1 FROM table WHERE id=3);

UPDATE文、WHERE文の式に合致するレコードが存在すればUPDATE、なければ無視。
INSERT文、NOT EXISTSでUPDATE文のWHEREと同じ条件を設定。
存在すればINSERTはされない、存在しなければINSERTが実行される。

簡単だけど、忘れがちなのでメモ。