2016-07-19 122 views
0

我想從表西班牙語更新MySQL表cp5sql,並在PhpMyadmin中使用以下語句。字段名稱是正確的,雖然在每個表中有一些不同。聲明的最後部分將更新限制爲單詞「able」,僅用於測試。從另一個表中更新mysql

我得到一個錯誤,什麼是錯上線2

UPDATE cp5sql c 
SET (Spanish_ID, Spanish_Type,Spanish_Uoffset,Spanish_Synset,Spanish_Word)= 
(SELECT SID,type,offset,synset,word FROM spanish s 
WHERE s.type=c.Type AND s.synset=c.synset AND c.Word ='able'); 

我也試過:

UPDATE cp5sql 
SET (Spanish_ID, Spanish_Type,Spanish_Uoffset,Spanish_Synset,Spanish_Word)= 
(SELECT SID,type,offset,synset,word FROM spanish 
WHERE spanish.type=cp5sql.Type AND spanish.synset=cp5sql.synset AND cp5sql.Word ='able'); 
+1

如果你有一個錯誤這是重要的信息。請更新您的問題以包含它。 –

回答

0

你有一個很好的猜測,但它實際上是一個UPDATE FROM語法。
事情是這樣的:

UPDATE 
    Table_A 
SET 
    Table_A.col1 = Table_B.col1, 
    Table_A.col2 = Table_B.col2 
FROM 
    Some_Table AS Table_A 
    INNER JOIN Other_Table AS Table_B 
     ON Table_A.id = Table_B.id 
WHERE 
    Table_A.col3 = 'cool' 

試圖讓你的例子這個語法將是這樣的:

UPDATE cp5sql c 
SET Spanish_ID = SID, 
    Spanish_Type = type, 
    Spanish_Uoffset = offset, 
    Spanish_Synset = synset, 
    Spanish_Word = word 
FROM spanish s 
WHERE s.type = c.Type 
    AND s.synset = c.synset 
    AND c.Word ='able'; 
+0

不錯的選擇。謝謝Pachonk。當另一個完成時我會運行它。速度等也應該是一個很好的比較。 – user3522145

+0

根據指數和加入方式,兩者中的一個可能比另一個快得多。 – Pachonk

0

你必須使用UPDATE JOIN

UPDATE cp5sql c 
JOIN spanish s 
ON s.type = c.Type AND s.synset = c.synset AND c.Word = 'able' 
SET 
    c.Spanish_ID = s.SID, 
    c.Spanish_Type = s.type, 
    c.Spanish_Uoffset = s.offset, 
    c.Spanish_Synset = s.synset, 
    c.Spanish_Word = s.word; 
+0

好的答案,除了它是一個更快的查詢來將靜態'able'分隔成查詢結尾的where子句。 – Pachonk

+0

謝謝格蘭特。這沒有錯誤,並已運行約15分鐘。兩者都是每個超過200k行的大文件,所以我猜測連接需要一些時間。 – user3522145

+0

@ user3522145因爲你有大數據,運行任何查詢都需要一點時間,在這裏我想你必須解釋這一點。 – Blank