2017-07-27 40 views
1

我試圖更新中的數據表:local.import_payments表:local.payments基於更新和內部聯接查詢。查詢我用:Postgresql更新和內部聯接

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' 

的CLIENT_ID,CLIENT_NAME,CUSTOMER_ID,CUSTOMER_NAME在local.import_payments需要獲得與基於該字段copy_to_imported_pa​​yments被檢查的條件表local.payments的值更新。

我在執行查詢時遇到語法錯誤。我嘗試了幾件事,但他們沒有奏效。任何人都可以查看查詢,讓我知道在哪裏的問題是

回答

1

請嘗試以下

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

請詳細解釋您的答案,而不是要求提問者試用您的解決方案。 – eden

0

你不應該指定模式/表更新的列,只有列名:

不要在目標列的規範中包含表名 - 例如,UPDATE table_name SET table_name.col = 1無效。

from the doc

你不應該使用更新表from子句中除的情況下的自聯接。

您可以使用「列表語法」縮短查詢時間。

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'