2013-02-16 9 views
5

boş ise, maksimum alt terimi varsayılan değeri ayarlama Örneğin, aşağıdaki tabloda, class=5 ile tabloda hiçbir kayıt yoksa dizinin 1 olarak ayarlanmasını istiyoruz; bu kayıtları mevcutsa, o zaman dizisi + 1 (alt grup class=5 olarak) değeri en fazla sekansı almalıdır:SQLite:</p> <p>: Sonuç, bir tablo içindeki alt grupları için bir sıra numarası artırmak isteyen, ancak bir alt grubu daha sonra mevcut değilse sırası, 1 ile başlamalıdır

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

sorun, ilk durum için çalışmaz üzerindedir.

cevap

6

ile sorgu çevreleyen, fonksiyon COALESCE() çok kullanışlı gelir:

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

çoğu diğer tarafından desteklendiğini diğer iyi şey hakkında COALESCE SQL motorları - MySQL, Postgres, vs ...

+0

hm, bu değer bir "çoğu ile çalışır" eklenmesi nedeniyle ... benim özlü öz her zaman googles "NVL SQL-Motor Adı alternatif" ;-) – Najzero

İlgili konular