【SQL】レコードが存在していなかったら、INSERTするには

レコードが存在していなかったら、INSERTするには

* 条件に「NOT EXISTS」を利用する

 => WHERE NOT EXISTS (SELECT * FROM 【テーブル名】 WHERE 【主キー名】='【主キー値】');

サンプル

例1:PostgreSQL

使用するテーブル
CREATE TABLE person
(
  id character(8) NOT NULL,
  name character varying(100),
  sex character(1),
  updatedate timestamp without time zone,
  CONSTRAINT person_pkey PRIMARY KEY (id)
)
何もない状態で以下を二回実行してみる
INSERT INTO person(
            id, name, sex, updatedate)
SELECT 'X0000001', 'Ocean', 'm', now()
WHERE NOT EXISTS (SELECT * FROM person WHERE id='X0000001');

例2:MySQL/Aurora

使用するテーブル
CREATE TABLE person
(
  id character(8) NOT NULL,
  name character varying(100),
  sex character(1),
  updatedate timestamp without time zone,
  CONSTRAINT person_pkey PRIMARY KEY (id)
)
何もない状態で以下を二回実行してみる
INSERT INTO person(
            first_name, family_name)
SELECT 'Mike', 'Dean' FROM DUAL
WHERE NOT EXISTS (SELECT * FROM person WHERE id=1);
補足:DUALについて
 * MySQL5.7 だとなくても問題ないのだが、AuroraだとSQL文法エラーになるのでつけている
   (詳細は以下の関連記事を参照のこと。)
http://blogs.yahoo.co.jp/dk521123/36695968.html


関連記事

PostgreSQL】UPDATE or INSERT を行うストアドの作成

http://blogs.yahoo.co.jp/dk521123/33945911.html

INSERT / UPDATEを行い、それ以外のレコードはDELETEをする

http://blogs.yahoo.co.jp/dk521123/33954185.html

データあればUPDATE、なければINSERT

http://blogs.yahoo.co.jp/dk521123/30656970.html

ダミーテーブル ~ DUAL ~

http://blogs.yahoo.co.jp/dk521123/36695968.html