2016-05-03 1 views
0

Ich habe die folgende UPDATE-AnweisungUPDATE mit Aggregat SELECT - SET Spalten 0, wenn SELECT ist leer

UPDATE stuff 
SET stuff.total = t.total 
FROM (
    SELECT SUM(price) FROM things WHERE stuff_id = ? GROUP BY stuff_id 
) t 
WHERE stuff.id = ? 

Dies funktioniert gut, wenn es tatsächlich Reihen in things, aber wenn kein UPDATE ausgeführt wird (was ich denke, macht Sinn). Was wäre ein eleganter Weg, stuff.total zu 0 in diesem Fall zu setzen? Ich würde es gerne in einer Abfrage machen. Ich habe schon versucht SET stuff.total = coalesce(t.total, 0), aber es hatte keine Wirkung.

+1

Ich bin verwirrt. Ihre Aussage ist syntaktisch falsch. 'ERROR: Syntaxfehler bei oder in der Nähe von" WHERE "' Auch scheint 'GROUP BY' redundant zu sein. Sind Sie sicher, dass dies eine Postgresql-Frage ist? – fl0cke

+0

ja @ fl0cke hat recht. Können Sie bitte Ihre genaue Anfrage posten? Zum Beispiel in Ihrer Unterabfrage, die WHERE erscheint nach GROUP BY, die nicht sein kann – e4c5

+0

danke @ fl0cke, bei dem Versuch, Domain-Besonderheiten zu redigieren Ich tauschte versehentlich die Anweisungen. Das ist jetzt behoben. –

Antwort

1

Sie haben coalesce nicht an der richtigen Stelle verwendet. Auch GROUP BY kann weggelassen werden. Versuchen Sie diese Abfrage:

UPDATE stuff 
SET stuff.total = t.total 
FROM (
    SELECT coalesce(SUM(price), 0) FROM things WHERE stuff_id = ?) t 
WHERE stuff.id = ? 
+0

Wenn die Dinge leer sind, gibt dies auch 0 Zeilen zurück –

+0

dies kombiniert mit dem, was @ fl0cke sagte, löste das Problem. Danke Leute! –