选择列然后使用选定的值进行更新

时间:2013-12-08 16:36:13

标签: mysql

是的,所以我将数据从旧的数据库结构迁移到新数据库,除了一个表之外,它都会膨胀。

我拥有新结构中的所有内容,但我现在需要更改一些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

谢谢!

1 个答案:

答案 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