2013-02-16 2 views
5

ich eine Sequenznummer für Untergruppen innerhalb einer Tabelle erhöhen möchten, aber wenn die Untergruppe nicht dann sollte die Sequenz mit 1 beginnen existiert:Sqlite: Standardwert Einstellung für eine max Unter Abfrage, wenn das Ergebnis null ist

Im folgenden Beispiel soll die Sequenz auf 1 gesetzt werden, wenn in der Tabelle keine Datensätze mit class=5 vorhanden sind; wenn es eine solche Aufzeichnungen vorhanden ist, dann sollte Sequenz den Wert max Sequenz nehmen (in der Subgruppe class=5) + 1:

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

Das Problem ist, die oben nicht für den ersten Fall funktioniert.

Antwort

6

In diesen Situationen Funktion COALESCE() ist sehr handlich:

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

Eine weitere gute Sache über COALESCE, dass sie von den meisten anderen unterstützt wird SQL-Engines - MySQL, Postgres, etc ...

+0

hm, das ist eine Aufwertung wert, b Wegen der "funktioniert mit den meisten" Zusatz ... mein awfull Selbst googelt immer "NVL SQL-Engine Name alternative" ;-) – Najzero

Verwandte Themen