2010-05-07 66 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` ;