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