2013-02-16 10 views
5

voglio incrementare un numero di sequenza per sottogruppi all'interno di una tabella, ma se il sottogruppo non esiste allora la sequenza dovrebbe iniziare con 1:Sqlite: impostazione valore predefinito per un massimo sub-query se il risultato è nullo

Ad esempio, nel seguito, vogliamo che la sequenza sia impostata su 1 se non ci sono record nella tabella con class=5; se esiste tali registri, poi sequenza dovrebbe prendere la sequenza valore massimo (nel sottogruppo class=5) + 1:

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

Il problema sia quello sopra non funziona per il caso iniziale.

risposta

6

In queste situazioni, la funzione COALESCE() è molto utile:

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

Un'altra cosa buona COALESCE che è supportato dalla maggior parte degli altri Motori SQL - MySQL, Postgres, ecc ...

+0

hm, questo vale un upvote, b a causa del "funziona con la maggior parte" aggiunta ... il mio io terribile sempre googles "NVL SQL Nome motore alternativa" ;-) – Najzero

Problemi correlati