【问题标题】:Replace in MySQL: Different values from a table to be replaced by "XXX"在 MySQL 中替换:要替换为“XXX”的表中的不同值
【发布时间】:2019-10-22 22:09:36
【问题描述】:

我想用“XXX”替换很多字符串。要替换的字符串在一个特殊的表中。例如。表中有“Mr. Smith”、“Mr. Miller”、...(数百条记录),另一张表的一个字段中有 e。 G。 “亲爱的史密斯先生,谢谢你……”。结果应该是“亲爱的XXX,谢谢你……”。该怎么做?

我唯一的想法是在 PHP 中创建一个循环并将其作为 Cronjob 执行。但是有没有什么方法可以纯粹用 SQL 语句来做呢?

【问题讨论】:

  • e. G。 “亲爱的某人,还是永远亲爱的某人,?

标签: mysql replace


【解决方案1】:

如果你有类似这些表格的东西:

CREATE TABLE Customer(
                CustomerID SMALLSERIAL PRIMARY KEY,             
                Name VARCHAR(256) NOT NULL);    

INSERT INTO Customer(Name) VALUES('Mr. Miller');
INSERT INTO Customer(Name) VALUES('Mr. Smith');     
INSERT INTO Customer(Name) VALUES('Mr. John');
INSERT INTO Customer(Name) VALUES('Mr. Alex');


Create table Template(
                TemplateID SMALLSERIAL PRIMARY KEY,
                Description VARCHAR(256) NOT NULL);

INSERT INTO Template(Description) VALUES('Dear Mr. Smith, thank you for');
INSERT INTO Template(Description) VALUES('Dear Mr. John, thank you for');       
INSERT INTO Template(Description) VALUES('Dear Mr. Alex, thank you for');

你可以使用这样的东西。

SELECT customer.Name, template.description, REPLACE(template.description, customer.Name, 'XXX') 
FROM Customer INNER JOIN Template ON template.description LIKE CONCAT('%', Customer.name, '%');

结果是:

更新查询类似于:

WITH subquery AS (
    SELECT customer.Name, template.description, REPLACE(template.description, customer.Name, 'XXX') 
    FROM Customer INNER JOIN Template ON template.description LIKE CONCAT('%', Customer.name, '%')
)
UPDATE template
SET description = subquery.replace
FROM subquery;

【讨论】:

    【解决方案2】:

    使用 Claudio Corchez 的回答中给出的相同表设置,这里是如何在没有子查询的情况下做到这一点:

    UPDATE `Template` AS t, 
        `Customer` AS c
    SET t.`Description` = REPLACE(t.`Description`, c.`Name`, 'XXX')
    WHERE t.`Description` LIKE CONCAT('%', c.`Name`, '%')
    ;
    

    IMO 这看起来更干净一些,但子查询的答案也很好。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-01-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-16
      • 1970-01-01
      • 2023-01-21
      相关资源
      最近更新 更多