2010-11-15 59 views
2

我有兩個MySQL表AB。表A有一個成員ref這是對B.id的外鍵引用。這使BA之間的1:多關聯成爲可能。顛倒兩個表之間的1:多關係

這已經生產了幾個星期,但我現在增加了更多的功能到我的代碼,並意識到我得到了我原來的映射錯誤。我需要BA之間的許多:1關係。也就是說,B.ref應該指向A.id,而不是相反。到目前爲止這不是一個問題,因爲迄今爲止所有的映射都是1:1。我如何將數據遷移到新的模式?

我猜:

  1. ALTER TABLE B ADD COLUMN ref INTEGER CONSTRAINT FOREIGN KEY (A.id) - 添加列第一
  2. 運行SQL等價的 「for row in A: row.ref.ref = row
  3. ALTER TABLE A DROP COLUMN ref

試圖做到這一點在SQLAlchemy的失敗帶有循環引用錯誤。我需要在SQL中完成,但不熟悉必要的SELECT + UPDATE語法。幫幫我?

回答

2

對於第2步:

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

這工作出色!謝謝! – 2010-11-16 10:05:34

0

只需添加外鍵約束作爲第四步,創建列時就不需要它了。

+0

好主意。應該嘗試一下。 – 2010-11-15 21:46:53