2017-03-19 41 views
0

我正在mysql表之間移動數據。我正在嘗試進行內部連接,然後將公司表中的columnX鏡像到人員表中的columnX。基於INNER JOIN與表2的MySQL更新列1

UPDATE people 
INNER JOIN company on people.currCompId=company.itemId 
SET people.companyId = company.id; 

儘管我在另一個表上進行類似的連接併成功移動數據,但這並不起作用。所以,我想簡單的SELECT語句使用相同的加盟,並沒有工作,要麼:

SELECT people.fullName, company.id 
from people 
INNER JOIN company on people.currCompId=company.itemId; 

如果任何人都可以闡明爲什麼更新語句無法進行任何更新,爲什麼select語句不返回任何光線任何東西。

people.currCompId & company.itemId都定義爲VARCHAR(50),並且它們都包含如「255A7C76-A6F0-40B5-ADBA-DE290B4GG5A1」,兩列具有用於該數據相同的源的數據,所以我本來預計它會加入。

+1

您沒有提供任何數據,也沒有解釋「not working」的含義。真的沒有任何人可以幫助你的信息。你拼寫正確的列名? –

+0

我原以爲很明顯,在這個上下文中「不工作」意味着a)更新語句無法更新任何內容b)select語句不返回任何內容 – schnimmy

+1

如果select不產生任何行,則表示沒有任何相關數據存在。你應該提供一些樣本數據的問題和你期望什麼結果 – GurV

回答

0

它不更新任何記錄的原因是因爲不匹配任何行。例如。下面應該不返回任何記錄:

SELECT * 
FROM people 
INNER JOIN company on people.currCompId=company.itemId; 

這也許是因爲查詢試圖加入companyIditemId?是否應該加入people.currComIdcompany.id

更新

基於示例(在更新的問題),它看起來既像companyIditemIdUUID格式。如果這兩個表中有一些記錄,然後我會建議看多一點如何將數據插入到這些表格中。如果不同的UUID用於CompanyItem(看起來像它),那麼它們將不匹配,因爲UUID幾乎總是唯一的。

+0

SELECT *什麼也沒有返回,列絕對正確。 – schnimmy

+0

如果'SELECT'不返回任何內容,那麼顯然'update'不會更新任何記錄。 –

+0

是的,我很清楚這一點,這就是爲什麼我在這裏要求爲什麼它可能不工作的建議。 – schnimmy

0

您正在嘗試加入兩個VARCHAR列。從你的解釋中可以清楚地看到,你加入的兩列都有共同的數據,所以這個問題應該與兩列數據如何比較有關。現在基於this explanation,您需要使您的比較更有效。更改您的查詢看起來像:

SELECT * 
FROM people 
INNER JOIN company on UPPER(TRIM(people.currCompId)) = UPPER(TRIM(company.itemId)); 

而且可以肯定你是比較兩個表具有相同的字符集的比較完美運行。

+0

感謝您的建議。我試過了,它沒有返回任何行,爲了確保列中有一些共同的值,我還運行了「SELECT * FROM WHERE LIKE」並確認存在共同的值。 – schnimmy

+0

@schnimmy兩個表都有相同的字符集和排序規則嗎? –

+0

公司和人員擁有相同的排序規則(utf8_general_ci),但人員中的相關列從另一個表中導入,即latin1_swedish_ci – schnimmy