首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >关系数据库将表关系OneToMany转换为ManyToMany。SQL脚本

关系数据库将表关系OneToMany转换为ManyToMany。SQL脚本
EN

Stack Overflow用户
提问于 2018-04-12 16:10:41
回答 2查看 78关注 0票数 1

我用postgresql。在db中,我有重要的元素:

代码语言:javascript
复制
|---------|    |------------|
| account |    | calendar   |
|---------|    |------------|
| id      |1--*| account_id |
|---------|    | id         |
               |------------|

这一部分必须是ManyToMany关系:

代码语言:javascript
复制
|---------|    |------------------|     |----------|
| account |    | account_calendar |     | calendar |
|---------|    |------------------|     |----------|
| id      |1--*| account_id       |  |-1| id       |
|---------|    | calendar_id      |*-|  |----------|
               |------------------|

我提供了更新脚本:

代码语言:javascript
复制
CREATE TABLE account_calendar_relation (
  account_id     BIGINT REFERENCES account_table,
  calendar_id    BIGINT REFERENCES calendar
);

ALTER TABLE calendar
DROP CONSTRAINT calendar_account_id_fkey,
DROP COLUMN account_id;

此脚本正确地更改db-schema结构,但丢失了重要信息(日历和现有数据帐户之间的映射)。

如何通过保存calendaraccount之间的现有映射来改进迁移脚本?

数据示例

输入数据:

代码语言:javascript
复制
account | id
          1
          2

calendar | id | account_id
           1  | 1
           2  | 1

预期结果:

代码语言:javascript
复制
account | id
          1
          2

calendar | id
           1 
           2 
account_calendar | account_id | calendar_id
                   1          | 1
                   1          | 2

但在实际结果中,account_calendar表是空的(因为没有动态总体)。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-04-12 23:59:45

CREATE TABLE account_calendar_relation之后和ALTER TABLE calendar之前将下面的SQL插入到迁移脚本中

代码语言:javascript
复制
INSERT INTO account_calendar_relation(account_id,calendar_id)
SELECT account_id,id FROM calendar;
票数 1
EN

Stack Overflow用户

发布于 2018-04-12 17:04:49

如何通过保存日历和帐户之间的现有映射来改进迁移脚本?

您需要在表创建查询之后和alter查询之前执行insert查询。

票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49801312

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档