是的,所以我将数据从旧的数据库结构迁移到新数据库,除了一个表之外,它都会膨胀。
我拥有新结构中的所有内容,但我现在需要更改一些ID。
简单地说,我注意到我现在有一张桌子,因为旧数据有一些重复。唯一的区别是PK。
在db的其他地方,我有引用该表的表,他们需要引用相同的行。
我运行了一个查询,它给了我想要保留的所有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是我要保留的PK,p2是我将在其他表中搜索的FK,并替换为相应的p1 PK
谢谢!
答案 0 :(得分:1)
您可以在该查询与要更新priceID的任何其他表之间执行INNER JOIN,并将新值设置为:
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