2015-06-10 34 views
1
update Claim 
set first_name = random_name(7), 
    Last_name = random_name(6), 
    t2.first_name=random_name(7), 
    t2.last_name=random_name(6) 
from Claim t1 
inner join tbl_ecpremit t2 
on t1.first_name = t2.first_name 

我得到以下錯誤這些表之間沒有關係(PK,FK)更新與相同的數據的兩個表,其中有

column "t2" of relation "claim" does not exist 
+0

目前還不清楚你想要做什麼。你想從表「tbl_ecpremit」中的數據更新表「索賠」還是你想在這兩個表中插入相同的新數據? – Patrick

+0

我想在兩個表中插入更新的新數據。 – user4287146

+0

不相關,但:從'tb1'聲明中刪除''。 [引自手冊](http://www.postgresql.org/docs/current/static/sql-update.html):「*請注意,目標表必須**不**出現在from_list中,除非您打算自我加入(在這種情況下,它必須在from_list中出現一個別名)*「 - 你真的打算在這裏自我加入嗎?即使兩個表都是連接條件的一部分,您也可以不使用單個UPDATE語句更新兩個不同的表。 –

回答

0

您可以用所謂的data-modifying CTE做到這一點:

WITH c AS (
    UPDATE claim SET first_name = random_name(7), last_name = random_name(6) 
    WHERE <put your condition here> 
    RETURNING * 
) 
UPDATE tbl_ecpremit SET last_name = c.last_name 
FROM c 
WHERE first_name = c.first_name; 

這裏假定random_name()是你定義的函數,它不是PostgreSQL afaik的一部分。

這裏的妙招是WITH查詢中的UPDATE使用RETURNING子句返回第一個表中的更新記錄。然後,您可以在主要的UPDATE語句中使用該記錄在第二個表中具有完全相同的數據。

雖然這是非常不穩定的,因爲您既在使用一些隨機值鏈接並修改「first_name」列。在現實生活中,如果你有更多關於名稱和條件的邏輯,這將只會奏效。

+0

中未寫入的示例。我想更新表。如果我更新索賠表的第一個和最後一個名字相同的值應該更新在tbl_ecpremit表 – user4287146

+0

查看更新的答案 – Patrick

+0

索賠表正在更新,我不認爲tbl_ecpremit將更新。 – user4287146

相關問題