微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在PostgreSQL中将多对多关系转换为一对多关系

我在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中执行子SELECT,但在这种情况下难以理解.

UPDATE bar b
SET    foo_id = fb.foo_id
FROM   foo_bar fb
WHERE  fb.bar_id = b.bar_id;

如果一个栏应该有多行(根据你的描述你不应该这样),一行将被多次更新,结果是任意的.

这种形式的查询通常比相关子查询执行得更好.

请注意,bar的主键实际上应该命名为bar_id – 我在查询中使用该名称.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐