我有一个包含字段(id、文本)的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
子句,您可以使用where exists
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/