2016-09-23 2 views
0

Also habe ich drei Tabellen: Firmen, Adressen und Firmenadresse.PostgreSQL - Spalte aus verwandter Tabelle kopieren

Aus Gründen der Optimierung muss ich city Spalte von addresses Tabelle zu companies Tabelle kopieren. Die Beziehung zwischen Firmen und Adressen ist viele zu eins (da viele Firmen dieselbe Adresse belegen können). Sie sind über die Tabelle company_address verbunden, die aus den Spalten address_id und company_id besteht.

ich diese Lösung für Fall ohne Zwischentisch gefunden: How to copy one column of a table into another table's column in PostgreSQL comparing same ID

Abfrage zu ändern Versuch kam ich mit:

UPDATE company SET company.city=foo.city 
FROM (
    SELECT company_address.company_id, company_address.address_id, address.city 
    FROM address LEFT JOIN company_address 
    ON address.id=company_address.address_id 
) foo 
WHERE company.id=foo.company_id; 

aber es gibt Fehler:

ERROR: column "company" of relation "company" does not exist

Ich kippe Figur was passiert. Ich werde für irgendwelche Ideen dankbar sein.

+0

'UPDATE Firma SET company.city = foo.city' == >>' UPDATE Firma SET city = foo.city' (und Sie brauchen die Unterabfrage nicht) – joop

Antwort

2

Sie brauchen keine Unterabfrage dafür. Verweisen Sie auch in der SET-Klausel auf Ihre Tabellenspalten ohne vorangehende mit Tabellennamen.

Ich glaube, dass, da Ihre WHERE Bedingung verbundene Tabelle enthält, sollte es INNER JOIN anstelle von LEFT JOIN sein.

Beachten Sie, dass die Verwendung von Aliasen für Tabellennamen den Code verkürzt und auf den ersten Blick lesbar macht.

0

Du hast Recht syntaktisch, die Sie gerade nicht brauchen, um den Tabellennamen am Anfang der Update-Anweisung:

UPDATE company SET city=foo.city 
FROM (
SELECT company_address.company_id, company_address.address_id, address.city 
FROM address LEFT JOIN company_address 
ON address.id=company_address.address_id 
) foo 
WHERE company.id=foo.company_id; 
Verwandte Themen