我有许多一对多之间foo和bar建模为表foo_bar与foo_id和bar_id。
foo
bar
foo_bar
foo_id
bar_id
我现在想将其建模为一对多(我的数据允许)。
我已经添加了一个foo_id列,bar但是现在我想迁移数据。所以,我想
UPDATE bar SET foo_id = f where id = b;
每个f和b一对来自哪里
f
b
SELECT foo_id AS f, bar_id AS b FROM foo_bar;
是否可以在SQL(特别是PostgreSQL 9.0)中执行此操作?
我知道只有一个值时如何在UPDATEs中执行子选择,但是在这种情况下很难做到这一点。
UPDATE bar b SET foo_id = fb.foo_id FROM foo_bar fb WHERE fb.bar_id = b.bar_id;
如果您应该为一行添加多行bar(根据您的描述,您不应该这样做),则该行将被更新多次,并且结果是任意的。
这种形式的查询通常比相关子查询执行得更好。
请注意,bar应该真正命名的主键bar_id-我在查询中使用该名称。