2012-10-22 38 views
0

我對MySQL的知識是非常基礎的,我很難處理複雜的查詢 - 對我而言,以下問題很複雜 - 希望它不適合您!如何編寫重複記錄的更新查詢

我一直在導入企業到我的數據庫,其中一些具有相同的公司名稱。例如,我們在表中有兩個地鐵分支,都有不同的地址。

我想設置的公司名稱爲「公司名稱」 +「鎮」,所以我們最終唯一字段:

  • 地鐵倫敦
  • 地鐵曼徹斯特

到目前爲止,我所能做的就是查看哪些公司名稱出現在db中兩次:

SELECT CompanyName , count(CompanyName) 
FROM directorydata 
GROUP BY CompanyName 
HAVING count(CompanyName) >1 

如何更新每個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 
        )