データが存在しない場合にデータを追加するSQL
テーブル内にデータが存在しない場合に限って、データを追加する方法を紹介します。
クエリについては日本語で解説をするよにも、まずはコードを見たほうが早いと思うので、先に載せます。
こちらが、データを追加するクエリです。
INSERT INTO tag ( name, created_at, modified_at ) SELECT 'test', now(), now() WHERE NOT EXISTS ( SELECT 1 FROM tag WHERE name = 'test' )
上記のクエリは、tagを追加する際に、すでにタグが存在していたら追加しないというクエリです。
これは、select insert文というものです。そして、not existを使って、存在しない場合を条件で追加しています。
where 1で真になるので、データがある場合でinsertが実行されます。
おまけ
一般的なinsert文はこのようなクエリだと思います。
insert into tag ( xxxx, yyyy, zzzz ) values ( 1, 2, 3 )
じゃあ、このクエリにwhereをつければよいのでは?と考えるかもしれませんが、それは構文エラーになります。
一応クエリを載せておきます。
INSERT INTO tag ( name, created_at, modified_at ) values ( 'test', now(), now() ) WHERE NOT EXISTS ( SELECT 1 FROM tag WHERE name = 'test' )