質問: お世話になります。 SQLite限定で、UPDATEで更新する値を、条件により 分岐させたいと考えています。 Webで検索すると、transact-sqlらしきものではできると 見つかるのですが、SQLiteでは使えるのでしょうか? やりたいのは、下記のような内容になります。 ``` SELECT MIN(index) FROM list WHERE index > (SELECT t_index FROM conf) //値がない場合 if (false) { UPDATE conf SET t_index=(SELECT MIN(index) FROM list WHERE index > 0) // 1以上の値の中から最小値をセット } // 値がある場合 else { UPDATE conf SET t_index=(SELECT MIN(index) FROM list WHERE index > (SELECT t_index FROM conf)) } ``` つまり、conf.t_indexよりも大きい値がlist.indexにあれば、その中の最小値を conf.t_indexにセットし、大きい数がなければlist.indexの最小値をセットしたいのです。 初心者なので、解らないためこのような質問になっていますが、 ソースコード側で分岐させなくても、SQLのみで実現できそうな気はします。 何卒よろしくお願いいたします。
回答: CASE式で機械的に書いてみました。 indexが予約語なので、ダブルクォートで囲んでいます。 ``` UPDATE conf SET t_index = ( SELECT MIN("index") FROM list WHERE "index" > CASE WHEN EXISTS( SELECT "index" FROM list WHERE "index" > (SELECT t_index FROM conf)) -- 値がある場合、conf.t_indexより大きなlist.indexの最小値をセット THEN ( SELECT t_index FROM conf) -- 値がない場合、1以上のlist.indexの最小値をセット ELSE 0 END ) ```