2010-05-07 62 views
0

我有一個表mytable(id,鍵,值)。由於我的密鑰是一個字符串,我意識到這個密鑰會產生大量的數據冗餘。 (我的密鑰真的很長,但repetititve)如何建立一個單獨的表(key,keyID),然後將我的表替換爲mytable(id,keyID,value)和keyTable(keyID,key)?使用查詢來更改表映射

回答

2
  1. mytable創建keyTable
  2. 填充鍵:

    INSERT INTO keyTable (`key`) SELECT DISTINCT mytable.key FROM mytable; 
    
  3. 添加keyIDmytable

  4. 分配keyIDs:

    UPDATE mytable SET keyID = (SELECT keyTable.keyID FROM keyTable WHERE keyTable.key = mytable.key); 
    
  5. mytable

+1

好的解決方案。關鍵是關鍵字,所以用這樣的'鍵'分化。所以請查看我的帖子以獲取更多信息。 – Karthik 2010-05-07 07:32:21

+0

Kartik,你說得對,對不起。我剛剛發佈了一個概念。 – 2010-05-07 07:38:13

+0

這是正確的解決方案,恕我直言。 從原始表中提取鍵和值時,必須使用DISTINCT,並且不需要它的id列。 – ceteras 2010-05-07 09:34:17

1

我只是張貼了我的訓練你的問題去掉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` ;