2015-10-15 64 views
0

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

这是脚本:

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

+0

其中是JOIN部分? – Alex

+0

@Alex在'WHERE' –

+0

@RowlandShaw :-)啊......我看到...... :-) – Alex

回答

-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 
+0

不幸的是,虽然我可以看到这是一个比我一直使用的更好的脚本。 – bgndy

+0

,就像一个魅力! http://sqlfiddle.com/#!9/2297d/1如果它不适合你检查你的数据并提供任何证据;-)创建你的ownsqlfiddle或发送一些截图,数据样本。 – Alex

+0

是的,它绝对是脚本化的,但我的问题似乎与MySQL没有认识到cdata_assignments.email字段是可匹配的,而不是脚本本身。 – bgndy

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)作为忽略大小写的连接条件。或者将这些列的排序规则更改为不区分大小写。

+0

诅咒。当我读到这些时,我确定是这样,但它也不起作用。 (我尝试了TRIM和LOWER,以及两者的组合。) – bgndy