簡體   English   中英

用聯接表在mysql更新查詢中乘以替換

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

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