Ich möchte einen Standardwert für eine Spalte verwenden, die verwendet werden soll, wenn keine Zeilen zurückgegeben werden. Ist das in PostgreSQL möglich? Wie kann ich es tun? Oder gibt es eine andere Möglichkeit, dies zu lösen?
Z.B. etwas wie das:
SELECT MAX(post_id) AS max_id DEFAULT 0 FROM my_table WHERE org_id = 3
Und wenn die Tabelle keine Zeilen mit org_id = 3
Enthält, möchte ich 0
Zurückgeben.
SELECT coalesce(MAX(post_id),0) AS max_id FROM my_table WHERE org_id = 3
oder
SELECT case count(*) when 0 then 0 else MAX(post_id) end AS max_id
FROM my_table
WHERE org_id = 3;
wenn Sie möchten, dass max (post_id) null
ist, wenn 1 Zeile vorhanden ist, post_id jedoch null ist
Wenn Sie 0
(Leider 1 Zeile) anzeigen möchten, wenn Ihre Abfrage 0 Zeilen zurückgibt, können Sie Folgendes verwenden:
SELECT COALESCE(
( SELECT MAX(post_id) FROM my_table WHERE org_id = 3 )
, 0) AS max_id
SELECT
coalesce(MAX(post_id),0) AS max_id
FROM
my_table
WHERE
org_id = 3
Die oben genannten Funktionen funktionieren nicht, wenn Sie den Standardnamen für das Namensfeld verwenden möchten, und sie funktionieren nur, wenn Sie das Nummernfeld verwenden. Die folgende Abfrage funktioniert für alle Arten von Feldern.
SELECT
COALESCE(
(SELECT column_name FROM my_table WHERE id = -1),
'default_value'
) AS column_name;
Ich kann keines der oben genannten Dinge zum Laufen bringen.
Folgendes habe ich gefunden, um dafür zu arbeiten:
SELECT COALESCE(A.max_id, B.dflt) FROM (
SELECT MAX(post_id) AS max_id FROM my_table WHERE org_id = 3) A
RIGHT OUTER JOIN (SELECT 0 AS dflt) B
ON 1 = 1
Ich erkenne keine elegante Lösung, mache aber den Job.