5

テーブル内のサブグループのシーケンス番号を増やしたいのですが、サブグループが存在しない場合、シーケンスは 1 から開始する必要があります。

たとえば、次の例では、テーブルにclass=5;のレコードが存在しない場合、シーケンスを 1 に設定します。そのようなレコードが存在する場合、 sequence は値 max sequence (サブグループ内class=5) + 1を取る必要があります。

update order set class=5, sequence=(select max(sequence) from order 
where class=5)+1 where order_id=104;

問題は、上記が最初のケースでは機能しないことです。

4

2 に答える 2

7

このような状況では、 functionCOALESCE()が非常に便利です。

UPDATE order
SET class = 5,
    sequence = coalesce(
        (SELECT max(sequence)
         FROM order 
         WHERE class=5),
        0
    ) + 1
WHERE order_id = 104

COALESCE他のほとんどの SQL エンジン (MySQL、Postgres など) でサポートされていることのもう 1 つの良い点は...

于 2013-02-16T07:02:56.663 に答える
4

IFNULL( QUERY, 0 )クエリを関数で囲むだけです

http://www.sqlite.org/lang_corefunc.html#ifnull

于 2013-02-16T07:01:15.007 に答える