1

我一直在努力将一个表中的一个大列(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

希望可以有人帮帮我!

4

2 回答 2

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。

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

于 2012-10-03T13:29:42.247 回答
0

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

 UPDATE postcodes_split pcs, postcodes pc
 SET pcs.postcodes2 = pc.postcode
 WHERE pcs.id = pc.id - 72974
于 2012-10-03T17:08:26.737 回答