[英]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.value
和original.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.