2013-12-08 76 views
1

正確,因此我正在將數據從舊數據庫結構遷移到新數據庫,並且除了一個表格外,它們都會膨脹。選擇列,然後使用選定的值更新

我在新的結構中擁有一切,但我現在需要更改一些ID。

簡而言之,我已經注意到我現在有一張表,由於舊數據有幾個重複項。唯一的區別是PK。

其他地方的數據庫我有表引用這個表,他們需要引用相同的行。

我已經運行了一個查詢,它給了我想要保留的所有PK以及我想要在其他表的外鍵列中更改的所有PK。

這裏是我的代碼:

SELECT p1.priceID, p2.priceID 
FROM price p1 LEFT JOIN price p2 
ON (p1.productTimeID = p2.productTimeID 
AND p1.priceTypeID = p2.priceTypeID 
AND p1.fareTypeID = p2.fareTypeID 
AND p1.priceID < p2.priceID) 
WHERE p1.priceID != p2.priceID 

P1是我想保持和P2是FK我將在其他表中查找和與其對應的P1 PK

由於更換PK !

回答

1

你可以做一個INNER該查詢,並且要更新priceID任何其他表之間的連接,並把那裏的新值:

UPDATE someOtherTable s 
INNER JOIN 
(
SELECT p1.priceID AS newPriceID, p2.priceID AS oldPriceID 
FROM price p1 
LEFT JOIN price p2 
    ON (p1.productTimeID = p2.productTimeID 
    AND p1.priceTypeID = p2.priceTypeID 
    AND p1.fareTypeID = p2.fareTypeID 
    AND p1.priceID < p2.priceID) 
WHERE p1.priceID != p2.priceID 
) a 
ON s.priceID = a.oldPriceID 
SET s.priceID = a.newPriceID 
+0

謝謝!我知道這很簡單! – Damian