1

私は、テーブル内の大きな列(170万行)を別のテーブル内の24個のはるかに小さな列に分割しようとして髪を引っ張ってきました。

からのテーブルは次のとおりです。分割される列「postcode」と自動インクリメント「id」列を含む「postcodes」

&テーブルは次のとおりです。「postcodes_spit」には、「postcode n 」( nに1〜24を挿入)と呼ばれる24列が含まれています;-)

24列の最初の列に挿入できます。

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

ただし、後続のINSERTはもちろん、他の列の行0から開始しません。

代わりにUPDATEを実行しようとしましたが、構文が間違っており、正しく作成できないようです。

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

誰かが私を助けてくれることを願っています!

4

2 に答える 2

0

やめて、何をしているのか考え直してください。これは本当に必要ですか?このような幅広い形式で保存されたデータは、あらゆる場所のSQLプログラマーの悩みの種です。それは正しい方法ではありません!

ただし、とにかく続行すると仮定します。

INSERTステートメントは新しい行を作成します。したがって、最善のアプローチは、1つのコマンドに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

これはテストされていないアイデアです。これは、次のような1回限りの操作に対してのみ提案します。

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