2016-11-02 2 views
2

Ich habe eine Datenbank mit sites und counties. Jeder Standort befindet sich in einem Landkreis. In der Tabelle sites ist die Grafschaft bereits erwähnt, aber ich möchte sie durch die ID ersetzen, die in der anderen Tabelle ist.PostgreSQL-Aktualisierung von einer Tabelle zu einer anderen basierend auf einer ID-Übereinstimmung

Mein Update-Code lautet wie folgt:

UPDATE sites 
SET cgid = c.gid 
FROM (select c.gid as a from counties c 
INNER JOIN sites s 
ON c.name = s.county) p; 

Die Tabelle sites aktualisiert wird, obwohl jeder Wert in der cgid Spalte ist die gleiche (die ID des ersten Kreises). Was kann ich tun, um die richtigen Werte zu erhalten?

+0

Was meinen Sie mit "ganzen Array"? Ist deine 'cgid' Spalte ein' Array'? Oder die Spalten 'name' oder' county'? –

Antwort

1

Die Zieltabelle einer update Anweisung sollte nie

So in der from Klausel wiederholt werden, ich glaube, Sie dies wünschen:

UPDATE sites s 
    SET cgid = c.gid 
FROM counties c 
where c.name = s.county; 

Dies setzt voraus, dass counties.name und sites.county sind beide einzigartig.

+0

Dir fehlte ein Alias ​​;-) –

+0

Das ist in der Tat was ich brauchte. Vielen Dank! – TD1995

0
UPDATE sites AS s 
SET cgid = c.gid 
FROM counties AS c 
WHERE c.name = s.county 
+0

Danke, das hat gut funktioniert! :) – TD1995

0

Sie benötigen keine JOIN. Stattdessen müssen Sie nur die beiden Tabellen in der WHERE-Klausel verbinden:

+0

Wirklich seltsam: Sie haben den frühesten Zeitstempel, aber ich sah Sie nie Post. –

Verwandte Themen