MySQL无法识别字段

时间:2015-10-15 15:31:56

标签: mysql csv

我有一个脚本,它应该更新table1的email_id列以匹配table2的id列,只要table1中的电子邮件地址与table2中的地址匹配。当我在一个CSV(使用从SalesForce导出的数据)上运行它时,它可以工作,但不会在一天后以相同方式导出的其他CSV中的数据上运行。

这是剧本:

UPDATE cdata_assignments, email_addresses
  SET cdata_assignments.email_id = email_addresses.id
  WHERE cdata_assignments.email = email_addresses.email_address

我已将问题缩小到cdata_assignments.email字段。它在phpmyadmin中看起来很好(所有条目看起来都像普通的电子邮件地址),但脚本似乎无法识别条目。同样,这是使用SalesForce中相同的报表模板导出的相同数据,并且它在昨天导出的CSV上正常工作,但它今天不适用于新的CSV。

脚本和Alex在下面建议的那些,在某些CSV上都可以正常工作。但是对于包含应该格式相同的数据的其他人来说,他们似乎并不认为cdata_assignments.email是一个可以匹配的字段。

Screenshot2    Screenshot3

2 个答案:

答案 0 :(得分:0)

这只是猜测,但其中一个表中的值可能有前导空格。在比较时尝试忽略它们:

UPDATE cdata_assignments AS a
JOIN email_addresses AS e ON TRIM(a.email) = TRIM(e.email_address)
SET a.email_id = e.id

另一种可能性是你在表上使用区分大小写的排序规则,它们的大小写也不同。使用LOWER(a.email) = LOWER(e.email_address)作为连接条件来忽略大小写。或者将这些列的排序规则更改为不区分大小写。

答案 1 :(得分:-1)

http://sqlfiddle.com/#!9/2297d/1

UPDATE cdata_assignments 
   JOIN email_addresses 
   ON cdata_assignments.email = email_addresses.email_address
   SET cdata_assignments.email_id = email_addresses.id