我有一个带字段(id,text)的messages表。
我有一个CSV文件(样板字符串),它被加载到另一个带有字段(txt)的临时表tmp_import中。
messages.texttmp_import都是字符串。messages可以包含样板,而tmp_import都是我要搜索的样板字符串。
用例是:
扫描tmp_import中的行,查找每一行:(i)在messages表中搜索所有匹配项,并用空格(“”)字符替换子字符串。
我已经将CSV加载到了一个临时表中,但仍停留在如何实现用子查询替换。

    UPDATE messages
    SET text = REPLACE (text, 'string_to_replace', '')
    WHERE text IN  (SELECT txt
             FROM tmp_import tmp
             WHERE messages.text LIKE CONCAT('%', tmp.txt, '%'));

关于如何让string_to_replace从子查询中的txt获取其值的任何线索。

最佳答案

如果子查询满足where exists子句,则可以使用where

UPDATE messages
SET text = REPLACE (text, 'string_to_replace', '')
WHERE EXISTS (SELECT 1
              FROM tmp_import tmp
              WHERE messages.text LIKE CONCAT('%', tmp.txt, '%'));

或者使用join从tmp_import获取值
UPDATE messages m
JOIN tmp_import tmp ON m.text LIKE CONCAT('%', tmp.txt, '%')
SET m.text = REPLACE (m.text, tmp.txt, '')

关于mysql - 用子查询的结果替换子字符串,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48072736/

10-11 02:56
查看更多