2012-10-22 3 views
0

MySQL에 대한 지식이 매우 기본적이고 복잡한 쿼리로 인해 어려움을 겪고 있습니다. 다음과 같은 문제가 복잡합니다.중복 레코드에 대한 업데이트 쿼리를 작성하는 방법

저는 데이터베이스에 비즈니스를 가져 왔습니다. 그 중 일부는 회사 이름이 같습니다. 예를 들어, 우리는 두 개의 Subway 브랜치를 테이블에 가지고 있으며 둘 다 서로 다른 주소를 가지고 있습니다.

내가 할 회사 이름을 설정하고 싶습니다 "회사 이름"+ "타운"그래서 우리는 고유의 필드와 끝까지 :

  • 지하철 런던
  • 지하철 맨체스터

지금까지 내가 관리해 왔던 것은 db에 두 개의 회사 이름이 두 번 나타나는지 확인하는 것입니다.

각 CompanyName 필드를 현재 값과 Town 필드의 값으로 업데이트하는 방법은 무엇입니까?

귀하의 도움에 감사드립니다.

답변

0
UPDATE directoryData 
    SET CompanyName = CONCAT(CONCAT(CompanyName, ' '), Town) 
WHERE CompanyName in (
        SELECT CompanyName 
         FROM directoryData 
         GROUP BY CompanyName 
         HAVING count(CompanyName)>1 
        ) 

편집 : 당신은 업데이트가 어디에 체크 값을 변경하는 경우 MySQL #1093 - You can't specify target table 'giveaways' for update in FROM clause에 따라, 엔진이 깨질 수, 맞다는 (첫 번째 지하철 레코드를 업데이트 한 후 두 번째>() 수를 일치하지 않습니다 더 이상 1 절 ...)

다음

,의 다른 방법으로 해보자 :

UPDATE directoryData 
    SET CompanyName = (
     CASE WHEN (
        SELECT count(CompanyName) 
         FROM directoryData 
         GROUP BY CompanyName 
         HAVING count(CompanyName) 
        ) 
       >1 
       THEN CONCAT(CONCAT(CompanyName, ' '), Town) 
       ELSE CompanyName 
       END 
     ) 

나는 그것을 시도 할 수없는, 내가 ... 손, 도움이되기를 바랍니다 의해 여기에 쓴

편집 2 :

(이전 솔루션 때문에 MySQL을 작동하지 않습니다) 일회성 작업을 위해 두 개의 테이블을 사용 :

UPDATE directoryData 
    SET CompanyName = CONCAT(CONCAT(CompanyName, ' '), Town) 
WHERE CompanyName in (
        SELECT CompanyName 
         FROM directoryData_CLONED 
         GROUP BY CompanyName 
         HAVING count(CompanyName)>1 
        ) 
관련 문제