Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 用子查询的结果替换子字符串_Mysql_Sql - Fatal编程技术网

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

Mysql 用子查询的结果替换子字符串,mysql,sql,Mysql,Sql,我有一个带有字段id、文本的消息表。 我有一个CSV文件样板字符串,它被加载到另一个临时表tmp_import中,带有txt字段 messages.text和tmp_import都是字符串。消息可以包含样板文件,而tmp_import是我打算搜索的所有样板文件字符串 用例是: 扫描tmp_import中的每一行:我在messages表中搜索所有出现的内容,并用空格字符替换子字符串。 我已经将CSV加载到了一个临时表中,但仍停留在如何实现子查询替换的问题上 UPDATE messages

我有一个带有字段id、文本的消息表。 我有一个CSV文件样板字符串,它被加载到另一个临时表tmp_import中,带有txt字段

messages.text和tmp_import都是字符串。消息可以包含样板文件,而tmp_import是我打算搜索的所有样板文件字符串

用例是:

扫描tmp_import中的每一行:我在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, '%'));
关于如何让字符串\u to \u replace从子查询中的txt获取其值的任何线索。

如果子查询满足where子句,则可以使用where exists

    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, '%'));
或者使用join从tmp_导入中获取值

UPDATE messages m
JOIN tmp_import tmp ON m.text LIKE CONCAT('%', tmp.txt, '%')
SET m.text = REPLACE (m.text, tmp.txt, '')
如果子查询满足where子句,则可以使用where exists

或者使用join从tmp_导入中获取值

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

谢谢,它满足where子句,挑战是字符串替换,我需要它是动态的,而不是硬编码的。它应该取决于子查询的字符串结果。@Ade请参阅带有join子句EAWESOME的答案中的第二种方法,让我试试。@Ade请确保首先对测试数据执行此操作。是否有加快此操作的技巧,消息表最多可包含500000行签名,它满足where子句,挑战是字符串替换,我需要它是动态的,而不是硬编码的。它应该取决于子查询的字符串结果。@Ade请参阅带有join子句的答案中的第二种方法。让我试试看。@Ade请确保首先对测试数据执行此操作。是否有加快此操作的技巧,消息表最多可包含500000行显示我是否可以将字符串\u to\u替换为动态,基于内部联接的每个字符串结果?如何根据内部联接的每个字符串结果使字符串\u to\u replace成为动态的?