带有 join 的 PostgreSQL 更新语句用于切换一对一关系的持有者

问题描述 投票:0回答:1

有两个表 MAIN 和 SUB。目前子表包含该关系,但需要使 MAIN 成为该关系的所有者。

以下是两个表的示例内容:

MAIN
| id | sub_id |
| 1  | null   |
| 2  | null   |
| 3  | null   |

SUB
| id | main_id |
| 1  | 1       |

执行此脚本

UPDATE main SET sub_id = sub.id FROM main m JOIN sub s ON s.main_id = m.id;
会对
MAIN
表执行以下结果:

MAIN
| id | sub_id |
| 1  | 1      |
| 2  | 1      |
| 3  | 1      |

这就是需要达到的预期结果

MAIN
| id | sub_id |
| 1  | 1      |
| 2  | null   |
| 3  | null   |

我也尝试过 onner、left、right、left external 和 right external 连接,但结果总是相同

postgresql join sql-update
1个回答
0
投票

您当前的查询使用表“main”两次并且没有关系。这会导致 update 更改所有记录。

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

并且您不能使用 JOIN 语法。

© www.soinside.com 2019 - 2024. All rights reserved.