无法使用另一个MYSQL表的相应数据正确更新一个MYSQL表

无法使用另一个MYSQL表的相应数据正确更新一个MYSQL表,mysql,sql,join,Mysql,Sql,Join,目前,我的任务是用mkplace表中相应的mkplace_id值更新mkindex表中的Place1列。这看起来很简单,但我一定是误解了什么或者遗漏了一些细节 期望的结果是存储相应的mkplace_id来代替mkindex.Place1 我开始尝试这方面的变化: 更新mkindex mkindex.Place1上的内部联接mkplace=mkplace.mkplace\u名称 设置mkindex.Place1=mkplace.mkplace\u id 这没有我想要的效果。内部联接本身实际上与Pl

目前,我的任务是用mkplace表中相应的mkplace_id值更新mkindex表中的Place1列。这看起来很简单,但我一定是误解了什么或者遗漏了一些细节

期望的结果是存储相应的mkplace_id来代替mkindex.Place1

我开始尝试这方面的变化:

更新mkindex mkindex.Place1上的内部联接mkplace=mkplace.mkplace\u名称 设置mkindex.Place1=mkplace.mkplace\u id

这没有我想要的效果。内部联接本身实际上与Place1=mkplace\u名称中的一些匹配,但绝对不是所有预期的匹配。它返回了大约117个匹配项,这是它应该返回的数十万个匹配项中的一个,而且它实际上没有将任何行的mkindex.Place1设置为mkplace.mkplace\u name

这让我尝试了其他几种方法,包括:

更新mkindex 设置mkindex.Place1= 选择mkplace\u id 从mkplace 其中mkindex.Place1=mkplace.mkplace\u名称 限制1

匹配的数量似乎是正确的,但它只是将Place1的每个实例替换为NULL

我是否忽略了一些显而易见的事情?我还认为这是由于排序,所以我也尝试在查询之前运行此命令:

ALTER TABLE mkplace转换为字符集latin1 COLLATE latin1\u general\u ci

任何指导都将不胜感激,在这一点上我比任何事情都更困惑

MK1_通用_ci

mkplace utf8\u概述\u ci


您的第一个查询看起来很好,我将详细讨论一下,并建议可能只有117行mkindex.Place1实际上等于mkplace.mkplace\u name。机器不会说谎。你可以在每根柱子周围加一个装饰条,但我怀疑这会有帮助。要了解您正在处理的问题,请先分析mkindex

选择 mkindex.Place1, 计数* 从…起 mkindex 分组
mkindex.1;返回多个匹配项的更新联接可能会相互覆盖,例如重复的Place1值。检查JOIN.TRIM的SELECT版本会显著增加匹配数,我从未注意到Place1前后空格字符的频率。这至少会让我更接近解决方案。是否有其他功能可以帮助清理此数据?此外,比较utf8和latin1字符串是否会产生差异?不管怎样,我把uft8转换成了拉丁文1,但奇怪的是,字符编码可能会引起问题,但可能只有当你使用的是其他语言,而你看起来不是。不过,保持一致性始终是个好主意。