2016-04-07 4 views
0

ich einen Tisch adressepostgreSQL - Aktualisiere eine Spalte in der gleichen Tabelle

adr_id | adr_over | adr_debitor | 
1  | NULL  | 235567  | 
2  | NULL  | 235587  | 
~ 
45678 | 1  | NULL 
45679 | 2  | 0 
~ 

Jetzt möchte ich die Spalte adr_debitor

aktualisieren
adr_id | adr_over | adr_debitor 
1  | NULL  | 235567 
2  | NULL  | 235587 
~ 
45678 | 1  | 235567 
45679 | 2  | 235587 
~ 

Ich habe versucht, mit:

UPDATE adresse 
    SET adr1.adr_debitor = adr2.adr_debitor 
FROM adresse adr1 
    INNER JOIN adresse adr2 
      ON adr1.adr_over = adr2.adr_id 
      AND adr1.adr_over IS NOT NULL 

Aber es gibt einen Syntaxfehler.

+0

ON adr1.adr_over = adr2.adr_id - Das scheint nicht korrekt zu sein Sie sollten in der gleichen Spalte beitreten. – voytech

Antwort

0

Sie können inner join nicht so in einer Update-Anweisung verwenden. Und Sie müssen auch nur die verknüpften Tabelle aufzulisten, nicht die Zieltabelle in der from Klausel:

UPDATE adresse adr1 
    SET adr1.adr_debitor = adr2.adr_debitor 
FROM adresse adr2 
WHERE adr1.adr_over = adr2.adr_id 

Die Bedingung AND adr1.adr_over IS NOT NULL wird nicht als Bedingung benötigt adr1.adr_over = adr2.adr_id nur wahr, wenn adr1.adr_over nicht null ist.

0

Als ich es tat, auf meine, es war so etwas wie dieses

UPDATE adresse adr1 
SET adr_debitor = adr2.adr_debitor 
FROM adresse adr2 
WHERE adr1.adr_over = adr2.adr_id 

tun SET adr1.adr_debitor = adr2.adr_debitor für mich gab Fehler, ich habe nicht adr1.adr_debitor nach SET hinzufügen