将substring替换为subsquery的结果

时间:2018-01-03 07:07:16

标签: mysql sql

我有一个messages表,其中包含字段(id,text)。 我有一个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获取其值的任何线索。

2 个答案:

答案 0 :(得分:2)

如果子查询满足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, '')

答案 1 :(得分:2)

UPDATE messages
SET text = REPLACE (text, tmp.txt, '')
FROM messages
INNER JOIN tmp_import tmp ON messages.text LIKE CONCAT('%', tmp.txt, '%')