MYSQL 通过连接更新未正确连接

标签 mysql sql join

我正在尝试更新表中在另一个表中定义的列。本质上,我连接两个表并通过将其设置为等于 tbl2 来更新 tb1 列中的数据。

UPDATE phone
JOIN companyInfo
ON companyInfo.companyName = phone.companyName
SET phone.companyID = companyInfo.companyID

出于某种原因,电话中的 companyID 仅针对某些行进行更新。我的电话表中有大约 5800 万行,每行都有一个与 companyInfo 中的公司名称相匹配的正确的公司名称。我不确定为什么只有 3400 万行受到更新的影响。相同的查询对于我的其他表来说非常有效。电话表的结构是正确的,但是mysql似乎无法识别电话中的某些公司名称,这意味着我无法通过某些公司名称搜索电话,即使这些名称在表中(我可以在SELECT *语句中看到它们)。这些名称在连接中未被识别。有人能解释一下吗?

最佳答案

这是您的查询:

UPDATE phone JOIN
       companyInfo
       ON companyInfo.companyName = phone.companyName
    SET phone.companyID = companyInfo.companyID;

如果这没有更新某些行,那是因为 companyName 不匹配。您可以调查不匹配的情况。这是一种方法:

select p.*
from phone p left join
     companyInfo ci
     on p.companyName = ci.companyName
where cci.companyName is null;

这很容易。为什么他们不匹配?可能有多种原因,例如:

  • 字符串开头有空格。
  • 区分大小写的数据库/服务器/表中的不同字符大小写
  • 不同重音的字母
  • 拼写出的缩写(例如“Co.”与Company)

一般来说,公司名称对于表来说是一个非常糟糕的键。我确实注意到您似乎有一个更好的 ID 并且您想使用它。您可能需要进行大量调查,除非您的公司名称已经过验证和标准化。

关于MYSQL 通过连接更新未正确连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27639213/

相关文章:

mysql - 性能 - MySQL 在插入记录时的默认排序顺序

mysql - 在多级识别关系中,在其孙子中创建祖 parent 键、主键是否正确?

c# - 在组合框中写入

mysql - 如何编写这个 MySQL 查询?

mysql - 错误代码 : 1242. 子查询返回超过 1 行(对于所有记录)

SQL:限制链接到每个连接行的行

SQL:使用前一行的值填充当前行

php - 用于 Codeigniter 关系的 DataMapper ORM

python - 在 python 上,如何在加入 float 列表后去掉引号?

mysql - 当我从另一个表中选择计数时,左连接不起作用