我有一個包含兩列(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))));
這不是很好的設計,你不應該把這些字段組合在一列上。實際上,「word = one」或「word = 1」沒有實際區別。你想這樣做動態SQL? 「 – Lamak
」但它不起作用「具體發生了什麼?你有錯誤信息嗎?任何行都可以修改嗎? –
@MarkByers不,我沒有收到錯誤消息。在這個例子中,'word = one'被替換爲'word = 1',但'word = three'不是。 –