PostgreSQL跨Schema依据匹配ID更新表字段的问题求助
PostgreSQL跨Schema更新表字段的正确SQL写法
你的报错原因是没有在UPDATE语句中引入t_sc.t表,PostgreSQL无法识别t_sc.t的来源,因此提示缺少FROM子句条目。
以下是两种可行的正确写法:
方法1:使用FROM子句关联表
这种写法直观高效,适合批量匹配更新:
UPDATE public.p SET name = t.name FROM t_sc.t WHERE p.id = t.id;
- 明确指定
public.p(若当前默认schema为public,可简化为p) - 通过
FROM引入t_sc.t表,利用WHERE条件按id匹配关联
方法2:使用子查询+EXISTS过滤
如果需要避免t表中无对应id时,p的name被更新为NULL,可以用这种写法:
UPDATE public.p SET name = ( SELECT name FROM t_sc.t WHERE t.id = p.id ) WHERE EXISTS ( SELECT 1 FROM t_sc.t WHERE t.id = p.id );
- 子查询负责获取对应
id的name值 WHERE EXISTS确保只更新t表中存在匹配id的行
内容的提问来源于stack exchange,提问作者Misbah Shaukat
相关产品推荐
相关产品推荐

