2013-12-08 2 views
1

맞아요. 이전 DB 구조의 데이터를 새로운 것으로 마이그레이션하고 있습니다. 따라서 하나의 테이블을 제외하고 모두 팽창합니다.선택한 열을 선택한 다음 값을 사용하여 업데이트

나는 새로운 구조의 모든 것을 가지고 있지만, 이제는 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 내가 다른 테이블에서 검색 및 해당 P1의 PK

감사로 대체 할 FK 인 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

관련 문제