我有一个带字段(id,text)的messages
表。
我有一个CSV文件(样板字符串),它被加载到另一个带有字段(txt)的临时表tmp_import
中。messages.text
和tmp_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/