用子查询的结果替换子字符串

z9zf31ra  于 2021-06-21  发布在  Mysql
关注(0)|答案(2)|浏览(370)

我有一个 messages 包含字段(id、文本)的表。我有一个csv文件(样板字符串),它被加载到另一个临时表中 tmp_import 带字段(txt)。
两者 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 在子查询中。

eyh26e7m

eyh26e7m1#

你可以用 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\u import获取值

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

kjthegm62#

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

相关问题