我有一个包含两列(id和word)的表。我有一个其他表有一个数据列,其值引用第一个表中的单词。以下是示例代码:
CREATE TABLE `words` (
`id` TINYINT,
`word` VARCHAR(50),
PRIMARY KEY (`id`)
);
INSERT INTO `words` VALUES (1, 'one'), (2, 'two'), (3, 'three');
CREATE TABLE `data` (
`data` TEXT
);
INSERT INTO `data` VALUES ('foo=bar\nword=one'), ('word=three');
我想将单词的引用替换为id。因此word=one
将变为word=1
,word=three
将变为word=3
,依此类推。我尝试了这个查询,但它不起作用:
UPDATE `data`, `words` SET `data`.`data` = REPLACE(`data`.`data`, CONCAT('word=', `words`.`word`), CONCAT('word=', `words`.`id`));
任何建议或想法如何实现我想要的?谢谢!
编辑:忘记提及数据列是INI格式,因此其他键值对也可以在字段中。调整了这个例子。
编辑:感谢@nortphole的想法,我设法构建了我需要的查询:
UPDATE `data` SET `data`.`data` = REPLACE(`data`.`data`, CONCAT('word=', SUBSTRING_INDEX(SUBSTRING_INDEX(`data`.`data`, 'word=', -1), '\n', 1)), CONCAT('word=', (SELECT `id` FROM `words` WHERE `words`.`word` = SUBSTRING_INDEX(SUBSTRING_INDEX(`data`.`data`, 'word=', -1), '\n', 1))));
答案 0 :(得分:2)
尝试这样的事情:
UPDATE data
SET data = CONCAT('word=',(SELECT id
FROM words
WHERE words.word = SUBSTRING_INDEX(data.data,'=',-1)))
抱歉,我这里没有MySql来测试它(确保SUBSTRING在'word ='之后得到所有内容)
编辑: 我使用substring_index和-1来获取=符号的最后一个索引。