• ベストアンサー

sql: update またはinsert を判断して1回で実行するには

わかりやすいように単純にしていますが table1に ID と titleフィールドがあるとして、 update table1 set title = 'no1' where ID = '1' と insert into table1 (ID,title) values ('1','no1') これを一個にまとめたいのですが、 一回のSQLで 指定したIDが なければ、挿入、存在すれば、アップデート みたいな処理は可能でしょうか? CASEとかEXISTS とかの組み合わせでできますでしょうか? 最近まで、SQLを利用したデータベースほとんど 利用していなかったので 初歩的なことで申し訳わけありませんが インターネットの解説サイトをみてもわからないので SQLの本を購入しましたが届くのが来週以降なので もし できるのでしたら、 使う関数名だけでもいいので教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • 7marine
  • ベストアンサー率36% (59/160)
回答No.2

クエリだけではたぶん出来ません。 ストアドプロシージャを作成するくらいしか方法はないでしょう。 ただしSQL Serverなら「INSTEAD OF トリガ」をあらかじめ作成しておけば、Insert文の時に該当行が既に存在する時に、かわりにupdateを実行することが可能です。 私の専門はSQL Serverなので他は良くわかりませんが Oracleにも有るみたいですね。 My SQL,PostgresSQLにそれに該当するものがあるのかは調べてません。

noname#21216
質問者

お礼

使っているSQLの仕様書をみると CREATE TRIGGER と CREATE VIEW をサポートしているようなので 使ってみようと思います。 http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/createdb/cm_8_des_08_49kj.asp http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/vdbt7/html/dvtskworkingwithtriggers.asp に使い方が載っていたので、 違うシステムのSQLですけど これを参考にコードを書いてみようと思います。 ありがとうございました。

その他の回答 (1)

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

1つのSQLではできないと思います。 UPDATEしてみて、 できない場合、INSERTするような処理になる(そのままですね) かと思います。

noname#21216
質問者

お礼

お返事ありがとうございます。 個々のレコード操作では、1回ではできないということですね。 個別では1回では、できないということなので テーブルを丸ごと挿入とアップデートができる BatchMoveみたいな SQLのコマンドのようなものはないのでしょうか?

関連するQ&A