2012-10-03 159 views
1

我一直在拉我的头发,试图将表中的大列(170万行)拆分为24个更小的列,并放在另一个表中。将表中的大列拆分成另一个较小列的表MYSQL

该表从是: “邮政编码”,其中包含列被分割“邮政编码”和一个自动增量“ID”列

&表的是: “postcodes_spit”,其中包含24列称为“邮政编码ñ”(在ñ插入1-24);-)

我可以在第一细24列的插入物:

INSERT INTO postcodes_split (postcodes1) 
SELECT postcode 
FROM postcodes 
WHERE (id <= 72974); 

但随后的INSERTS当然不会从其他列中的第0行开始。

我试图做UPDATE代替,但我已经得到了语法错误,我似乎无法作出正确选择:

UPDATE postcodes_split 
SET postcodes2 = postcode FROM postcodes 
WHERE id FROM postcodes BETWEEN 72975 AND 145948 

希望有人能帮帮我!

+0

这个真没有在所有非常清晰,我甚至某些问题是什么。请参阅[常见问题](http://stackoverflow.com/faq)。 –

+1

看来你正试图将设计良好的SQL表转换为设计不佳的表。你为什么做这个? – dan1111

+0

参考这个问题可能是它解决您的问题 http://stackoverflow.com/questions/9692852/mysql-turn-one-long-table-column-into-table-with-multiple-columns – user786

回答

0

这里有一个未经测试的想法,我只会建议像这样的一次性操作:

UPDATE postcodes_split pcs, postcodes pc 
SET pcs.postcodes2 = pc.postcode 
WHERE pcs.id = pc.id - 72974 
+0

对不起,这是完美的! – mousebat

0

请停下来重新考虑你在做什么。这真的有必要吗?以这种宽格式存储的数据是各地SQL程序员的祸根。这是不正确的做法!

但是,假设你反正继续:

每个INSERT语句创建一个新的行。所以,最好的方法是一次插入全部24列。做这样的事情:

INSERT INTO postcodes_split (postcodes1,postcodes2,postcodes3,...) 
    SELECT p1.postcode, p2.postcode, p3.postcode... 
     FROM postcodes p1 WHERE (id <= 72974) 
     join postcodes p2 on p2.id = p1.id + 72974 
     join postcodes p3 on p3.id = p1.id + 145948 
     ... 

您的确切数学可能会有所不同,这取决于id是基于0还是基于1。

再次,不要这样做(但我想你的老板可能会告诉你这么做;在这种情况下,玩得开心!)。

相关问题