0

我对 MySQL 的了解非常基础,我在处理复杂的查询时遇到了困难——对我来说,以下问题很复杂——希望它不适合你!

我一直在将企业导入我的数据库,其中一些具有相同的公司名称。例如,我们在表中有两个 Subway 分行,它们都有不同的地址。

我想将公司名称设置为“公司名称”+“城镇”,所以我们最终得到了唯一的字段:

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

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

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

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

非常感谢您的帮助!

4

1 回答 1

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 - 你不能在 FROM 子句中为更新指定目标表“赠品”,如果更新更改了 where 中检查的值,引擎可能会中断(你更新了第一个地铁记录,然后第二个不再匹配 count()>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
                      )
于 2012-10-22T10:07:23.813 回答