【问题标题】:Reversing a 1:many relationship between two tables反转两个表之间的 1:many 关系
【发布时间】:2010-11-16 05:46:29
【问题描述】:

我有两个 MySQL 表 AB。表A 有一个成员ref,它是对B.id 的ForeignKey 引用。这使得 BA 之间存在 1:many 关联。

这已经投入生产几周了,但我现在正在向我的代码中添加更多功能,并且意识到我的原始映射错误。我需要BA 之间的多:1 关系。也就是说,B.ref 应该指向A.id,而不是相反。直到现在这还不是问题,因为到目前为止都是 1:1 映射。如何将我的数据迁移到新架构?

我猜:

  1. ALTER TABLE B ADD COLUMN ref INTEGER CONSTRAINT FOREIGN KEY (A.id) -- 先添加列
  2. 运行与“for row in A: row.ref.ref = row”等效的 SQL
  3. ALTER TABLE A DROP COLUMN ref

尝试在 SQLAlchemy 中执行此操作失败并出现循环引用错误。我需要在 SQL 中执行此操作,但不熟悉必要的 SELECT+UPDATE 语法。帮忙?

【问题讨论】:

    标签: sql foreign-key-relationship


    【解决方案1】:

    对于第 2 步:

    update b, a
        set b.ref = a.id
        where a.ref = b.id
    

    【讨论】:

      【解决方案2】:

      第四步添加外键约束,创建列时不需要。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-03-16
        • 2016-06-27
        • 2017-07-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多