2016-07-13 10 views
0

Ich versuche, die Tabelle zu aktualisieren, wenn min_failed von bx_temp kleiner ist als der aktuelle Wert min_failed in der Tabelle.Spalte ist mehrdeutig, wenn ein Update in Postresql

Ich bekomme immer eine "min_failed ist mehrdeutig" mit Bezug auf die Min_failed in meinem Fall-Anweisung. Ich kann ihm aber auch keinen Tabellenalias zuordnen.

with c as (select * from b_temp) 
    update table b 
    set min_failed = (select case when ct.min_failed < min_failed then ct.min_failed else min_failed end) 
    from c 
    where c.user = b.user 

Antwort

2

Ich bin nicht in der Lage, die Abfrage zu testen, aber man kann es wie so ändern:

WITH c AS (SELECT * FROM b_temp) 
UPDATE table b 
SET min_failed = LEAST(c.min_failed,b.min_failed) 
-- Use LEAST() instead of case logic. Also fixes your error because you were using SELECT without a FROM 
FROM c 
WHERE c.user = b.user; 
+0

Das funktionierte, danke. Wird die LEAST-Funktion Nullen ausschließen? Ich möchte nichts als NULL setzen, wenn dort bereits ein Wert war. – c3win90

+0

@ c3win90 - Laut der Dokumentation: "Das Ergebnis wird nur dann NULL sein, wenn alle Ausdrücke NULL ergeben." https://www.postgresql.org/docs/current/static/functions-conditional.html – Nicarus