我对MySQL的了解非常基础,我对复杂的查询很困难 - 对我来说,下面的问题很复杂 - 希望它不适合你!
我一直在将商家导入我的数据库,其中一些商家名称相同。例如,我们在表中有两个地铁分支,两个地址都有不同的地址。
我想将公司名称设为“公司名称”+“城镇”,因此我们最终得到了独特的字段:
到目前为止,我所要做的就是检查哪些公司名称在数据库中出现两次:
SELECT CompanyName , count( CompanyName )
FROM directorydata
GROUP BY CompanyName
HAVING count( CompanyName ) >1
如何使用当前值以及Town字段更新每个CompanyName字段?
非常感谢您的帮助!
答案 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
)