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

标签 mysql sql

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

最佳答案

如果子查询满足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/

相关文章:

mysql - 尝试将 mysql 与 jsp 连接时获取 ClassNotFoundException

sql - 2012 SQL作业问题

mysql - 如果我只知道用户名,如何使用 SQL 语句从网站获取数据?

python - 如何将多个 gpx 文件加载到 PostGIS 中?

php - 将 IGNORE 添加到由架构更新创建的 ALTER TABLE 语句

mysql - 如何处理规范化数据库中的标签?

MySQL SELECT 排除多个范围

php - 使用 mysql、php 和 ajax(使用 jquery)创建表

php - 如何使用 mysqli 和 php(仅使用查询)基于另一列对两个表中的一列进行连接和求和

mysql - 如何查询以获得以下唯一结果?