Fractionnement d'une grande colonne d'un tableau en une autre table de colonnes plus petites MYSQL

StackOverflow https://stackoverflow.com//questions/12709307

Question

Je me suis arraché les cheveux en essayant de diviser une grande colonne d'un tableau (1,7 million de lignes) en 24 colonnes beaucoup plus petites dans un tableau différent.

Le tableau de est :"codes postaux" qui contient la colonne à diviser "code postal" et une colonne "id" à incrémentation automatique

& le tableau à est :"postcodes_spit" qui contient 24 colonnes appelées "postcoden" (insérer 1-24 dans n) ;-)

Je peux bien INSÉRER dans la première des 24 colonnes :

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

mais les INSERTS suivants ne commencent bien sûr pas à partir de la ligne 0 dans les autres colonnes.

J'ai essayé de faire UPDATE à la place mais j'ai une mauvaise syntaxe et je n'arrive pas à la corriger :

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

J'espère que quelqu'un pourra m'aider !

Était-ce utile?

La solution

Voici une idée non testée que je ne suggérerais qu'une opération unique comme celle-ci:

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

Autres conseils

S'il vous plaît, arrêtez-vous et reconsidérez ce que vous faites.Est-ce vraiment nécessaire ?Les données stockées dans un format large comme celui-ci sont le fléau des programmeurs SQL du monde entier.Ce n’est pas la bonne façon de procéder !

Cependant, en supposant que vous continuiez quand même :

Chaque INSERT L'instruction crée une nouvelle ligne.La meilleure approche consiste donc à insérer les 24 colonnes à la fois en une seule commande.Faites quelque chose comme ceci :

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
         ...

Vos calculs exacts peuvent varier selon que l'identifiant est basé sur 0 ou sur 1.

Encore une fois, ne faites pas cela (mais je suppose que votre patron vous dit probablement de le faire ;dans ce cas, amusez-vous !).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top