替换值中的列引用

时间:2012-07-03 21:05:06

标签: mysql sql

我有一个包含两列(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=1word=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))));

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来获取=符号的最后一个索引。