在这些表之间没有关系(PK,FK)的情况下更新具有相同数据的两个表

时间:2015-06-10 04:27:33

标签: postgresql

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 

我收到以下错误

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

1 个答案:

答案 0 :(得分: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的一部分。

这里的巧妙技巧是UPDATE查询中的WITH使用RETURNING子句返回第一个表中的更新记录。然后,您可以在主UPDATE语句中使用该记录,以在第二个表中使用完全相同的数据。

这一切都非常不稳定,因为你们都在链接和修改&#34; first_name&#34;具有一些随机值的列。在现实生活中,如果你对名称和条件有更多的逻辑,这将只会有效。