2017-12-21 1 views
0

Hallo Ich würde Zeile basierend auf der gleichen Tabelle aktualisieren. Kopieren Sie die Spalte "Daten" in jede Zeile, in der die Daten "" (leer) sind. "Key" in diesen Zeilen ist gleich.PostgreSQL Update-Zeile basierend auf der gleichen Tabelle

id |data |key 
    ----|-----|----- 
    1 | xyz |key1 
    ----|-----|----- 
    2 | "" |key1 

Ich habe so etwas versucht, aber "Beziehung eine nicht nicht existiert":

UPDATE a 
SET a.data = b.data 
FROM table a 
    INNER JOIN table b 
    ON (a.key = b.key) 
WHERE b.data != '""' 

Antwort

1

In Postgres, die Syntax ist:

UPDATE a 
    SET a.data = b.data 
    FROM a b 
    WHERE a.key = b.key AND b.data <> '""' AND a.data = '""'; 

Hinweis: Dies setzt voraus, dass a ist der Tabellenname; b ist dann ein Alias ​​für die Tabelle und die "Join" Bedingungen sind in der WHERE Klausel.

2

In Postgres SQL, sollten Sie den Namen der Zieltabelle in der FROM-Klausel nicht wiederholen


UPDATE table_a dst -- <<-- target table 
SET data = src.data 
FROM table_a src  -- <<--- same table, different alias 
WHERE dst.key = src.key 
AND dst.data = '""' 
AND src.data <> '""' 
     ; 
(so dass Sie nicht ein JOIN verwenden)
Verwandte Themen