Sql 如何在Postgres中根据另一个表更新记录

Sql 如何在Postgres中根据另一个表更新记录,sql,postgresql,Sql,Postgresql,我在博士后有两张桌子 TableA id, item_id, parent_id 1 i1 null 2 i2 1 -> match the id of the first record (1) 3 i3 2 -> match the id of the second record (2) TableB parent_id, item_id null i1 i1

我在博士后有两张桌子

TableA
id, item_id, parent_id
1     i1        null
2     i2         1 -> match the id of the first record (1)
3     i3         2 -> match the id of the second record (2)

TableB
parent_id, item_id
  null           i1
   i1            i2         
   i2            i3
i1是顶层,i2是第二层,i3是第三层

我需要根据表B将表A中的parent_id列更新为1和2

我有

Update TableA set parent_id = ? (SELECT id from TableA WHERE TableA.item_id = TableB.parent_id)
from TableB
where TableB.parent_id = TableA.item_id
以上基本上是我所需要的,但我不确定具体的systax是否能做到这一点。有人能帮忙吗

非常感谢

我认为你不太清楚你想要的是这样的东西,没有经过测试:

Update TableA set parent_id = TableA_parent.id
from TableB
inner join TableA TableA_parent
  on TableB.parent_id = TableA_parent.item_id
where TableB.item_id = TableA.item_id

试试这个答案。您可以使用带有连接的UPDATE FROM语句来执行您的请求。谢谢,但我不想根据TableB记录更新父项id。我需要在TableB中找到记录并使用它更新TableA中的父id。请注意,TableA中的parent_id为null,1,2不是i1,i2。您只需调整链接答案中的值。这里提供了语法。我也看到了一个新的答案,这个问题似乎很合适。为什么父id在一个表中是字符串,在另一个表中是整数?这个名字让我很难理解这个问题。您似乎希望第一个表中的深度,但我不是100%确定。这正是我需要的。非常感谢你。