PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Null zurückgeben, wenn kein Datensatz gefunden wird

Sie könnten:

SELECT COALESCE(SUM(columnA), 0) FROM my_table WHERE columnB = 1
INTO res;

Dies funktioniert, weil Ihre Abfrage eine aggregierte Funktion hat und folglich immer gibt eine Zeile zurück, auch wenn in der zugrunde liegenden Tabelle nichts gefunden wird.

Einfache Abfragen ohne Aggregat würden keine Zeile zurückgeben in einem solchen Fall. COALESCE würde niemals gerufen werden und könnte dich nicht retten. Während wir uns mit einer einzelnen Spalte befassen, können wir stattdessen die gesamte Abfrage umbrechen:

SELECT COALESCE( (SELECT columnA FROM my_table WHERE ID = 1), 0)
INTO res;

Funktioniert auch für Ihre ursprüngliche Abfrage:

SELECT COALESCE( (SELECT SUM(columnA) FROM my_table WHERE columnB = 1), 0)
INTO res;

Mehr über COALESCE() im Handbuch.
Mehr zu Aggregatfunktionen im Handbuch.
Weitere Alternativen in diesem späteren Beitrag:

  • Wie man einen Wert von einer Funktion zurückgibt, wenn kein Wert gefunden wird