2015-10-15 59 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