簡體   English   中英

用另一個MySQL表更新一個MySQL表

[英]Update one MySQL table with values from another

我正在嘗試根據另一個MySQL信息更新一個MySQL表。

我的original表格如下:

id | value
------------
1  | hello
2  | fortune
3  | my
4  | old
5  | friend

tobeupdated表看起來像:

uniqueid | id | value
---------------------
1        |    | something
2        |    | anything
3        |    | old
4        |    | friend
5        |    | fortune

我想根據value (存儲在VARCHAR(32)字段中的字符串)使用original id來更新tobeupdated中的id

希望更新后的表如下所示:

uniqueid | id | value
---------------------
1        |    | something
2        |    | anything
3        | 4  | old
4        | 5  | friend
5        | 2  | fortune

我有一個有效的查詢,但是非常慢:

UPDATE tobeupdated, original
SET tobeupdated.id = original.id
WHERE tobeupdated.value = original.value

這使我的CPU耗盡,最終導致超時,並且僅執行了一部分更新(有數千個要匹配的值)。 我知道按value匹配會很慢,但這是我必須將它們匹配在一起的唯一數據。

有沒有更好的方法來更新這樣的值? 如果可以更快的速度,我可以為合並結果創建第三個表?

我嘗試過MySQL-如何使用另一個表中的值更新表? ,但並沒有真正的幫助。 有任何想法嗎?

在此先感謝您幫助MySQL新手!

UPDATE tobeupdated
INNER JOIN original ON (tobeupdated.value = original.value)
SET tobeupdated.id = original.id

那應該做到,實際上它確實在做您的工作。 但是,我更喜歡使用“ JOIN”語法進行連接,而不是使用多個“ WHERE”條件,我認為它更易於閱讀

至於運行緩慢,表有多大? 您應該在tobeupdated.valueoriginal.value上具有索引

編輯:我們還可以簡化查詢

UPDATE tobeupdated
INNER JOIN original USING (value)
SET tobeupdated.id = original.id

當聯接的兩個表都具有相同的命名key例如id時, USING是簡寫形式。 即一個等值聯接-http: //en.wikipedia.org/wiki/Join_( SQL)#Equi-join

這取決於這些表的用途,但是您可以考慮在插入和更新時在原始表上放置觸發器。 插入或更新完成后,僅根據原始表中的一項更新第二個表。 這樣會更快。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM