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