You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL一对一关系主表切换:UPDATE JOIN语句异常排查

解决方案

问题出在你写的UPDATE语句没有将待更新的main表与FROM子句中的关联表正确绑定,导致所有行都被匹配到唯一的sub记录,从而全量更新。以下是两种正确的写法:

方法一:使用FROM+WHERE关联更新

UPDATE main
SET sub_id = s.id
FROM sub s
WHERE main.id = s.main_id;

这种写法通过WHERE子句明确关联main表的id和sub表的main_id,只有匹配的行才会被更新,未匹配的行sub_id保持原有null值。

方法二:使用关联子查询更新

UPDATE main
SET sub_id = (
    SELECT s.id
    FROM sub s
    WHERE s.main_id = main.id
);

关联子查询会针对main表的每一行,去sub表中查找对应main_id的记录,找到则赋值,找不到则保持null,完全符合一对一关系的更新需求。

执行任意一种语句后,main表的结果都会符合预期:
| id | sub_id |
| 1 | 1 |
| 2 | null |
| 3 | null |

内容的提问来源于stack exchange,提问作者stefan.stt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 04:25:56