无法使用另一个

时间:2017-11-09 18:37:09

标签: mysql sql join

目前,我的任务是更新 mkindex 表中的 Place1 列,并在 mkplace中使用相应的 mkplace_id 表。这看起来很简单,但我必须误解某些东西或遗漏一些细节。

所需的结果是存储相应的mkplace_id代替mkindex.Place1

我开始尝试对此进行修改:

UPDATE mkindex INNER JOIN mkplace ON mkindex.Place1 = mkplace.mkplace_name SET mkindex.Place1 = mkplace.mkplace_id

这没有我想要的效果。内连接本身实际匹配 Place1 = mkplace_name 一些,但绝对不是所有预期的匹配。它返回了应该返回的数十万个匹配项中的117个匹配项,而且它实际上并没有将 mkindex.Place1 设置为 mkplace.mkplace_name

这让我尝试了其他一些方法,包括:

UPDATE mkindex SET mkindex.Place1 = ( SELECT mkplace_id FROM mkplace WHERE mkindex.Place1 = mkplace.mkplace_name LIMIT 1 )

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

我忽略了一些明显的东西吗?我还认为这是由于整理,所以我也尝试在查询之前运行它:

ALTER TABLE mkplace CONVERT TO CHARACTER SET latin1 COLLATE latin1_general_ci

任何指导都会非常感激,我现在​​比任何事情都更困惑。

mkindex (latin1_general_ci)

mkindex description

mkplace     (utf8_general_ci)

mkplace description

1 个答案:

答案 0 :(得分:2)

您的第一个查询看起来很好,我将会出现问题,并建议可能只有117行,其中mkindex.Place1实际上等于mkplace.mkplace_name。机器不撒谎。你可以在每列附近添加一个TRIM(),但我怀疑这会有所帮助。要了解您正在处理的内容,请先尝试分析mkindex。

SELECT 
  mkindex.Place1,
  COUNT(*)
FROM
  mkindex
GROUP BY 
  mkindex.Place1;