我有一个脚本,它应该更新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是一个可以匹配的字段。
答案 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