我一直在拉着我的头发试图将一张表(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
希望有人可以帮助我!
答案 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