2011年12月20日火曜日

insert文の勉強

既に登録されているデータならばinsertを行わないSQL文

selectで登録済みかどうかをチェックしてからinsertする・・という発想になり
2つのSQL文を発行していました
いつも、これを1度にまとめられないものかと思いながら・・

今回は1つのSQL文で上記のことを行うようにしました
DBはPostgreSQLです

例)
テーブル:table1
カラム:value1, value2

insert into table1 (value1, value2)
select 'value1', 'value2' from table1
where not exists (
select * from table1 where value1 = 'value1'
) limit 1


(空で書いたので実行できないかもしれません)

複数のテーブルが関連するような複雑なものではなく、
1つのテーブルに、単純にレコードを挿入する際に、
重複登録を避けたいための文です

limitがいけてない気もします・・
not existsだけでは複数行該当する→複数回挿入してしまう→そうだlimitだ
という発想です・・
ど、どうなのでしょうか
よりよい手段を見つけたいです

0 件のコメント:

コメントを投稿