我在 foo
和 bar
之间有一个多对多模型,它被建模为一个表 foo_bar
和 foo_id
和 bar_id
。
我现在想将其建模为一对多(我的数据允许)。
我已将 foo_id
列添加到 bar
,但现在我想迁移我的数据。所以,我想
UPDATE bar SET foo_id = f where id = b;
每个 f
和 b
对来自
SELECT foo_id AS f, bar_id AS b FROM foo_bar;
是否可以在 SQL(特别是 PostgreSQL 9.0)中执行此操作?
我知道当只有一个值时如何在 UPDATE 中执行子选择,但在这种情况下不知道如何执行。
最佳答案
UPDATE bar b
SET foo_id = fb.foo_id
FROM foo_bar fb
WHERE fb.bar_id = b.bar_id;
如果您应该为一个 bar
设置多行(根据您的描述,您不应该这样做),则该行将更新多次,结果是任意的。
这种形式的查询通常比相关子查询执行得更好。
请注意,bar
的主键实际上应该命名为 bar_id
- 我在查询中使用该名称。
关于sql - 在 PostgreSQL 中将多对多关系转换为一对多关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12151761/