2014-12-24 90 views
0

我正在嘗試更新另一個表中定義的列。基本上,我將兩個表連接在一起,並通過將tbl2設置爲等於tb1來更新列中的數據。加入MYSQL更新未正確加入

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

由於某些原因,手機中的companyID只針對某些行進行更新。我在手機tbl中有大約58mil行,每個都有一個與companyInfo中的companyName匹配的正確companyName。我不知道爲什麼只有34mil的行受到更新的影響。相同的查詢已完美適用於我的其他表格。手機表的結構是正確的,但是mysql似乎沒有識別手機中的某個公司名稱,這意味着即使這些名稱在表格中(我可以在SELECT *語句中看到它們),我也無法通過某些公司名稱搜索手機。這些名稱是在連接中未被識別的名稱。任何人都可以對此有所瞭解嗎?

+1

要進行故障排除,請執行LEFT JOIN(僅選擇 - 不更新)連接字段爲空的位置,以查看哪些行不匹配。 – dugas

+1

你可以只是做同樣的陳述,但作爲選擇而不是更新?我會想象你會得到相同的結果,你正在更新...兩個表之間的公司名稱可以有所不同嗎? (縮寫,尾隨空格等) – Kritner

+0

這兩個表/列的排序是否相同? – i486

回答

2

這是您的查詢:

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; 

這很簡單。他們爲什麼不匹配?可能有多種原因,例如:

  • 空格在字符串的開頭。
  • 不同的字符的情況下在區分大小寫的數據庫/服務器/表
  • 信函,通過修飾不同
  • 縮寫拼寫(例如,「公司」,對應的Company

一般而言,公司名稱爲桌子製作一個非常糟糕的鑰匙。我注意到,你似乎有一個更好的ID,你想使用它。除非您的公司名稱已經過驗證和標準化,否則您可能需要進行大量調查。

+0

是的,公司名稱在整個數據庫中都是一樣的,因爲我從同一個文件導入了所有信息,而不必親自更改任何名稱。 –