目前,我的任务是更新 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)
mkplace (utf8_general_ci)
答案 0 :(得分:2)
您的第一个查询看起来很好,我将会出现问题,并建议可能只有117行,其中mkindex.Place1实际上等于mkplace.mkplace_name。机器不撒谎。你可以在每列附近添加一个TRIM(),但我怀疑这会有所帮助。要了解您正在处理的内容,请先尝试分析mkindex。
SELECT
mkindex.Place1,
COUNT(*)
FROM
mkindex
GROUP BY
mkindex.Place1;