0
我有一個表mytable(id,鍵,值)。由於我的密鑰是一個字符串,我意識到這個密鑰會產生大量的數據冗餘。 (我的密鑰真的很長,但repetititve)如何建立一個單獨的表(key,keyID),然後將我的表替換爲mytable(id,keyID,value)和keyTable(keyID,key)?使用查詢來更改表映射
我有一個表mytable(id,鍵,值)。由於我的密鑰是一個字符串,我意識到這個密鑰會產生大量的數據冗餘。 (我的密鑰真的很長,但repetititve)如何建立一個單獨的表(key,keyID),然後將我的表替換爲mytable(id,keyID,value)和keyTable(keyID,key)?使用查詢來更改表映射
mytable
創建keyTable
填充鍵:
INSERT INTO keyTable (`key`) SELECT DISTINCT mytable.key FROM mytable;
添加keyID
列mytable
分配keyIDs:
UPDATE mytable SET keyID = (SELECT keyTable.keyID FROM keyTable WHERE keyTable.key = mytable.key);
從mytable
我只是張貼了我的訓練你的問題去掉key
列。只需檢查這一步一步:
CREATE TABLE `keytable` (
`keyID` INT(11) NOT NULL auto_increment,
`key` VARCHAR(100) NOT NULL,
`id` INT(11) NOT NULL
) ;
insert into `keytable` (`key`,`id`) select `key`,`id` from mytable;
ALTER TABLE `mytable` CHANGE `key` `keyID` INT(11) NOT NULL ;
update `mytable` set `keyID`= (select `keyID` from keytable where keytable.id=mytable.id)
ALTER TABLE `keytable` DROP `id` ;
好的解決方案。關鍵是關鍵字,所以用這樣的'鍵'分化。所以請查看我的帖子以獲取更多信息。 – Karthik 2010-05-07 07:32:21
Kartik,你說得對,對不起。我剛剛發佈了一個概念。 – 2010-05-07 07:38:13
這是正確的解決方案,恕我直言。 從原始表中提取鍵和值時,必須使用DISTINCT,並且不需要它的id列。 – ceteras 2010-05-07 09:34:17