2017-07-27 15 views
1

Ich versuche, Daten in Tabelle zu aktualisieren: local.import_payments aus Tabelle: local.payments basierend auf Update und Inner Join-Abfragen. Die Abfrage, die ich verwenden:Postgresql Update & Inner Join

Update local.import_payments 
    Set local.import_payments.client_id = local.payments.payment_for_client__record_id, 
local.import_payments.client_name = local.payments.payment_for_client__company_name, 
local.import_payments.customer_id = local.payments.customer__record_id, 
local.import_payments.customer_name = local.payment_from_customer, 
local.import_payments.payment_id = local.payments.payment_id 
From local.import_payments 
Inner Join local.payments 
Where local.payments.copy_to_imported_payments = 'true' 

Der client_id, client_name, customer_id, customer_name in den local.import_payments mit den Werten aus der Tabelle local.payments unter der Bedingung, basierend aktualisiert zu werden braucht, dass das Feld copy_to_imported_payments geprüft.

Ich bekomme einen Syntaxfehler beim Ausführen der Abfrage. Ich habe ein paar Dinge ausprobiert, aber sie haben nicht funktioniert. Kann jemand die Abfragen durchsehen und lassen Sie mich wissen, wo das Problem

Antwort

1

Versuchen Sie, die folgende

UPDATE local.import_payments 
Set local.import_payments.client_id = 
local.payments.payment_for_client__record_id, 
local.import_payments.client_name = 
local.payments.payment_for_client__company_name, 
local.import_payments.customer_id = local.payments.customer__record_id, 
local.import_payments.customer_name = local.payment_from_customer, 
local.import_payments.payment_id = local.payments.payment_id 
FROM local.payments as lpay 
WHERE lpay.<<field>> = local.import_payments.<<field>> 
AND local.payments.copy_to_imported_payments = 'true' 
+4

Bitte erläutern Sie Ihre Antwort im Detail, anstatt den Fragesteller zu bitten, Ihre Lösung zu versuchen. – eden

0

Sie ist nicht für aktualisierten Spalten des Schemas/Tabelle angeben, nur Spaltennamen:

Geben Sie den Namen der Tabelle nicht in die Spezifikation einer Zielspalte ein, z. B. ist UPDATE tabellenname SET table_name.col = 1 ungültig.

from the doc

Sie sollten nicht die Update-Tabelle in der from Klausel ausgenommen des Falles zu verwenden, selbst zu verbinden.

Sie können Ihre Abfrage mithilfe der "Spaltenlisten-Syntax" verkürzen.

update local.import_payments as target 
    set (
    client_id, 
    client_name, 
    customer_id, 
    customer_name, 
    payment_id) = (
    source.payment_for_client__record_id, 
    source.payment_for_client__company_name, 
    source.customer__record_id, 
    source.payment_from_customer, 
    source.payment_id) 
from local.payments as source 
where 
    <join condition> and 
    source.copy_to_imported_payments = 'true'