2013-02-16 9 views
5

Chcę zwiększyć liczbę sekwencji dla podgrup w tabeli, ale jeśli podgrupa nie istnieje wówczas sekwencja powinna zaczynać się od 1:Sqlite: Ustawienie wartości domyślnej dla max sub-zapytania, jeśli wynik jest zerowy

Na przykład poniżej chcemy ustawić sekwencję na 1, jeśli nie ma rekordów w tabeli z class=5; Jeśli istnieje takie rejestry, a sekwencja powinna sekwencję wartość max (w podgrupie class=5) + 1:

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

Problemem jest powyżej nie działają dla pierwszego przypadku.

Odpowiedz

6

W takich sytuacjach funkcja COALESCE() przychodzi bardzo poręczny:

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

Inną dobrą rzeczą COALESCE że jest obsługiwany przez większość innych Silniki SQL - MySQL, Postgres, itd ...

+0

hm, to jest warte przegranej, b z powodu dodania "działa z większością" ... moje straszne ja zawsze szuka "alternatywy dla NVL SQL-Engine Name" ;-) – Najzero

Powiązane problemy