2012-10-03 77 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。

再次,不要這樣做(但我想你的老闆可能會告訴你這麼做;在這種情況下,玩得開心!)。

相關問題