2つの列(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))));