如何为重复记录编写更新查询

时间:2012-10-22 09:57:59

标签: mysql

我对MySQL的了解非常基础,我对复杂的查询很困难 - 对我来说,下面的问题很复杂 - 希望它不适合你!

我一直在将商家导入我的数据库,其中一些商家名称相同。例如,我们在表中有两个地铁分支,两个地址都有不同的地址。

我想将公司名称设为“公司名称”+“城镇”,因此我们最终得到了独特的字段:

  • 地铁伦敦
  • 地铁曼彻斯特

到目前为止,我所要做的就是检查哪些公司名称在数据库中出现两次:

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

如何使用当前值以及Town字段更新每个CompanyName字段?

非常感谢您的帮助!

1 个答案:

答案 0 :(得分: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,如果更新改变了在哪里检查的值(你更新第一个Subways记录,那么第二个与count()&gt ; 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
                      )
相关问题