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