[英]multiply replace in mysql update query with join table
我有一些桌子:
#comments
| id| text |
----------------
| 1 | aa bb cc |
#words
| id| word |
------------
| 1 | aa |
| 2 | bb |
然后我運行此查詢
UPDATE comments AS c
LEFT JOIN
words AS w ON (c.text LIKE CONCAT('%', w.word, '%'))
SET
c.text = REPLACE(
c.text,
w.word,
CONCAT('<b>', w.word, '</b>')
)
結果我在注釋表中有此數據
| id| text |
-----------------------
| 1 | <b>aa</b> bb cc |
如何更改我的查詢以得到一些結果呢?
| id| text |
------------------------------
| 1 | <b>aa</b> <b>bb</b> cc |
評論太長了。
簡單的答案是,您無法使用單個MySQL update
語句來完成所需的操作。 你有,你必須在多行的情況#words
在比賽中給定行該表#comments
表。 文檔中對發生的情況進行了說明 :
對於多表語法,UPDATE更新滿足條件的table_references中命名的每個表中的行。 即使每個匹配行多次匹配條件,它也會更新一次。
這可以在某些使用遞歸CTE的數據庫中完成。 並且,如果您具有正則表達式替換功能,則可能會出現這種情況。 但是,這些都不是MySQL中的選項。
這給您兩個選擇。 第一種是編寫存儲過程並循環執行update
。 第二個是修復您的數據結構,這樣您就不會在字符串中存儲事物列表。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.