gpt4 book ai didi

mysql - 在 mysql 中使用交叉连接更新语句

转载 作者:行者123 更新时间:2023-11-30 21:39:37 26 4
gpt4 key购买 nike

我有一个表,其中有一列包含文本 blob。我想通过使用映射表来更新文本字段中的一些值,但我不确定是否有没有游标的方法。这是一个例子:

USE Temp;

CREATE TABLE `Temp`.`test_text` (
`some_text` text
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COMMENT=' ';

CREATE TABLE `Temp`.`mapping` (
`src` VARCHAR(1024) NULL,
`dest` VARCHAR(1024) NULL) ENGINE=InnoDB DEFAULT CHARSET=latin1 COMMENT=' ';

-- test_text has a single column with some_text
INSERT INTO `Temp`.`test_text`
(`some_text`)
VALUES
('There once was a man named BobFrank. He changed his name to BobDude.');

-- path_mapping has two columns, which contain all the mappings I'd like to do
INSERT INTO `Temp`.`mapping`
(`src`,
`dest`)
VALUES
('BobFrank', 'BobsNewFrank'),
('BobDude', 'BobsNewDude');

UPDATE `Temp`.`test_text` tt, `Temp`.`mapping` mp
SET tt.some_text = REPLACE(tt.some_text, mp.src, mp.dest);

SELECT *
FROM `Temp`.`test_text`

结果:

从前有一个人叫 BobsNewFrank。他改名为 BobDude。”

上面的代码似乎只是替换了输出中的 BobFrank。我想看到的是更新后 test_text 中的值:

从前有一个人叫 BobsNewFrank。他将自己的名字改为 BobsNewDude。

最佳答案

您当前的表结构不太理想,因为 test_text 表中包含未规范化的 CSV 数据。这将排除使用我们想在这里使用的大多数数据库操作。我能够想出一个解决方案,但它需要将 test_text 中的每个 CSV 术语存储在单独的行中。即我使用了下表:

CREATE TABLE test_text (some_text varchar(55));
INSERT INTO test_text (some_text)
VALUES
('"/tmp/BobFrank"'),
('"/tmp/BobDude/"');

我将 path_mapping 保留为与您拥有的相同。然后,我只需要一个相当简单的查询:

SELECT
GROUP_CONCAT(REPLACE(t1.some_text, t2.src, t2.dest)) AS output
FROM test_text t1
INNER JOIN path_mapping t2
ON t1.some_text LIKE CONCAT('%', t2.src, '%');

这产生了以下输出:

enter image description here

Demo

关于mysql - 在 mysql 中使用交叉连接更新语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52316014/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com