将表中的大列拆分为另一个较小列MYSQL的表

时间:2012-10-03 13:15:43

标签: mysql sql-update where clause

我一直在拉着我的头发试图将一张表(170万行)中的一根大柱分成另一张桌子中的24个更小的列。

表来自: “postcodes”,其中包含要分割为“postcode”的列和一个自动增量“id”列

&安培;表格是: “postcodes_spit”包含24列,名为“postcode n ”(在 n 中插入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

希望有人可以帮助我!

2 个答案:

答案 0 :(得分: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。

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

答案 1 :(得分:0)

这是一个未经考验的想法,我只建议像这样的一次性操作:

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