10045


お世話になります。

SQLite限定で、UPDATEで更新する値を、条件により  
分岐させたいと考えています。  
Webで検索すると、transact-sqlらしきものではできると  
見つかるのですが、SQLiteでは使えるのでしょうか？

やりたいのは、下記のような内容になります。

[code]

    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))
    }
    
[/code]

つまり、conf.t_indexよりも大きい値がlist.indexにあれば、その中の最小値を  
conf.t_indexにセットし、大きい数がなければlist.indexの最小値をセットしたいのです。

初心者なので、解らないためこのような質問になっていますが、  
ソースコード側で分岐させなくても、SQLのみで実現できそうな気はします。

何卒よろしくお願いいたします。


CC BY-SA 3.0
2015-05-11T07:00:28.557
10033
2015-05-12T01:28:48.063
2015-05-11T07:04:38.587
8000
9374
question
sql sqlite
SQLite限定・条件分岐させたい


CASE式で機械的に書いてみました。  
indexが予約語なので、ダブルクォートで囲んでいます。

[code]

    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
    )
    
[/code]


CC BY-SA 3.0
2015-05-11T09:34:31.857
10045
2015-05-12T01:28:48.063
2015-05-12T01:28:48.063
8431
8431
10033
answer