|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Candidat au titre de Membre du Club
![]() Inscription : février 2007 Messages : 42 ![]() |
Bonjour,
J'ai une table t1 de 30 champs et environ 2 millions de lignes et je me suis aperçu d'une erreur de calcul dans un des champs, champ f1 par exemple. J'ai corrigé le calcul et j'ai maintenant un fichier avec les nouvelles valeurs (l'ordre des lignes est conservé). Avec LOAD DATA INFILE, j'ai copié mes nouvelles valeurs dans le champ f2 d'une table temporaire t2. Je voudrais "juste" remplacer les mauvaises valeurs par les bonnes sans conditions sans rien, c'est-à-dire faire un truc du style J'ai d'abord essayé sur des petites tables, mais sans succès (ça ne recopie que la première ligne de t2.f2 dans tout le champ t1.f1). Est-ce que vous auriez une idée ? Et petite question subsidiaire : est-ce que ça va prendre du temps pour 2 millions de lignes ? Merci par avance pour votre aide, Ptit Bleu. |
|
|
00
|
|
|
#2 |
|
Membre actif
![]() |
et avec un where ? (sans aucune conviction).
Code :
UPDATE t1,t2 SET t1.f1=t2.f2 WHERE t1.f1=t2.f2 |
|
|
00
|
|
|
#3 |
|
Candidat au titre de Membre du Club
![]() Inscription : février 2007 Messages : 42 ![]() |
Bonjour Maysa et merci pour ta réponse.
Mais je n'ai pas de where à mettre. Dans mon cas t1.f1 est différent de t2.f2 puisque j'aimerais remplacer l'un par l'autre. Et un where sur 2 millions de lignes, ça doit durer, non ? Une autre idée ? Merci par avance, Ptit Bleu. |
|
|
00
|
|
|
#4 | ||
![]() ![]() |
Il faut mettre une condition de jointure sur la ou les colonnes qui forme(nt) la clé primaire de la table :
Code :
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework... « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau) À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française ! Linuxiens, comptez-vous ! |
||
|
00
|
|
|
#5 |
|
Candidat au titre de Membre du Club
![]() Inscription : février 2007 Messages : 42 ![]() |
Comme j'avais vérifié que l'ordre des lignes était conservé, je n'ai créé qu'un vecteur avec les nouvelles valeurs.
Je n'ai donc pas de champ pour faire le lien entre les deux tables (t2 ne possède que le champ f2). Si j'ai bien compris, il faut que je retraite mes données en ajoutant un champ commun entre les deux tables (clé primaire obligatoire ou juste un champ commun ?) Et pour le temps d'exécution, une idée (heure, jour, ...) ? Merci pour les confirmations, Bonne fin de journée, Ptit Bleu. |
|
|
00
|
|
|
#6 |
![]() ![]() |
Ta table t1 n'a pas de clé primaire ?
Il faut que tu détermine dans t1 et dans t2 l'ensemble de colonnes qui vont permettre de déterminer de manière unique chaque ligne pour les faire correspondre en condition de jointure.
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework... « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau) À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française ! Linuxiens, comptez-vous ! |
|
00
|
|
|
#7 |
|
Candidat au titre de Membre du Club
![]() Inscription : février 2007 Messages : 42 ![]() |
Euh ben non.
C'était prévu en utilisant un n° de mesure unique mais il y a eu un souci etj'ai parfois 2 n° identiques. Le seul champ unique c'est l'heure de la mesure stockée comme une chaine de caractère du type "2010-11-24 17:12:00". Mais ce servir de ça comme clé primaire, ça risque de ne pas être efficace, non ? Désolé pour ces questions de base mais il faut vraiment que je remette à jour la base dès que possible. Encore merci pour votre aide, Ptit Bleu. |
|
|
00
|
|
|
#8 | |
![]() ![]() |
Citation:
Alors indexe cette colonne dans la table t1 et dans la table 2 et fais une jointure dessus dans ton UPDATE.
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework... « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau) À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française ! Linuxiens, comptez-vous ! |
|
|
00
|
|
|
#9 |
|
Candidat au titre de Membre du Club
![]() Inscription : février 2007 Messages : 42 ![]() |
Et si je rajoute une colonne en fin de table dans chaque table qui donne le n° de la ligne auto-incrémenté qui pourrait servir de clé primaire. Et ça pourrait servir si jamais un nouveau problème de ce genre arrivait.
C'est mieux ou pas ? Si oui, comment créer cette colonne mais en fin de table pour ne gêner le programme qui inscrit les données dans la table t1 ? Je sens qu'on approche d'une solution :-) Encore un dernier effort ! Merci encore pour votre aide, Ptit Bleu. |
|
|
00
|
|
|
#10 | ||
![]() ![]() |
Citation:
Citation:
Par contre la fin de ta phrase me laisse à penser que la requête INSERT de ton programme ne précise pas les noms de colonnes à alimenter, ce qui n'est pas bien !
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework... « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau) À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française ! Linuxiens, comptez-vous ! |
||
|
00
|
|
|
#11 | |||
|
Candidat au titre de Membre du Club
![]() Inscription : février 2007 Messages : 42 ![]() |
Pour répondre à ta remarque
Citation:
Ensuite je copie tout le tableau et pas un champ après l'autre. Je vais essayer de rajouter une colonne dans mes tables de test et appliquer ta requête : Code :
Je mets "Résolu" (trop optimiste ?) par avance. Merci pour votre aide (en particulier merci à Cinephil), Ptit Bleu. PS : je viens de finir. Ca a marché !!! Mais j'ai dû le faire en 2 temps : d'abord ajouter une nouvelle colonne et dans un deuxième temps la déclarer comme clé primaire. Lorsque je faisais tout en une seule requête, la colonne était mise en premier, ce que je ne voulais pas. Bon week-end. |
|||
|
|
00
|
Copyright © 2000-2012 - www.developpez.com