2017-07-27 41 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'