Page 1 sur 1

corriger sur une DB une fois pour toute

Posté : 20 janv. 2012, 18:40
par xzena
bonjour,
j'ai un petit souci dont j'espère que vous vous m'aider à trouver une solution..
alors j'ai rempli une table :personnes(nom,prénom..),Et sur une table :affectation j'ai enregistré des centaines d'affectation avec les nom&prénom des personnes importé de la table personnes.
Après,j'ai trouvé que tout le contenu des champ noms était manquant(vu que size c'était pas suffisant au début)Donc j'ai commencé à compléter nom par nom dans chaque enregistrement.. une opération qui était pas vraiment belle :/
Maintenant quand j'ai visualiser les affectations j'ai trouvé les anciens noms donc ma correction a eté limité sur la principale table qui est personne,maintennat je veux savoir si il y a une méthode pour corriger les noms qui sont sur la table affectatin sachant qu'il y u un id commun entre les deux tables!! :/
si quelqu'un à une solution facile merci infiniment de le partager .

Re: corriger sur une DB une fois pour toute

Posté : 20 janv. 2012, 19:06
par Aureusms
Pas testé :

UPDATE personne SET personne.nom = affectation.nom WHERE personne.id = affectation.id

Re: corriger sur une DB une fois pour toute

Posté : 21 janv. 2012, 12:19
par xzena
Oui exacte!ça marché avec :
update table2 set nom=(select nom from table1 where table1.id=table2.id)
merci

Re: corriger sur une DB une fois pour toute

Posté : 23 janv. 2012, 13:29
par xzena
Désolé pour le Re mais j'ai pas fais attention à un problème.^^
dans ma table1 j'ai le champs nom+prénom+id
dans la table2 j'ai un seul champs qui concatène ces 3 champs qui s'appelle nom.
donc quand j'ai exécuté la requête:
update table2 set nom=(select nom from table1 where table2 .id=table1 .id)
il m'a remplacé tout le contenue que j'avais (exemple: tito toto (id) ) par tito donc que dois-je ajouté en mon cas y a comment concatène les 3 champs selon id après faire l'update sur SQL ??

Merci d'avance.

Re: corriger sur une DB une fois pour toute

Posté : 23 janv. 2012, 16:15
par Ryle
Tu peux utiliser la fonction concat() de MySQL pour concaténer plusieurs valeurs (chaines ou colonnes) :
SELECT CONCAT('My', 'S', 'QL');
        -> 'MySQL'

Re: corriger sur une DB une fois pour toute

Posté : 23 janv. 2012, 16:34
par xzena
Merci pour votre réponse,alors j'ai essayé un truc comme ça:
update table2 set nom = ( SELECT CONCAT('nom', 'prenom', 'id')  FROM table1 where table2 .id = table1.id)
Alors il me rends pas les valeurs des champs mais ça : nomprenomid :?

Re: corriger sur une DB une fois pour toute

Posté : 23 janv. 2012, 20:51
par Ryle
Entre apostrophes c'est une chaine :) :
- 'nom', c'est la chaine
- nom, c'est la colonne (et donc la valeur quand tu fais un select)
 SELECT CONCAT('nom', 'prenom', 'id')
        -> nomprenomid
 SELECT CONCAT(nom, prenom, id)
        -> BonbeurJean42

Re: corriger sur une DB une fois pour toute

Posté : 26 janv. 2012, 17:19
par xzena
oui je sais c'est pour te montrer que c'est des valeurs non ds chaines :s

Re: corriger sur une DB une fois pour toute

Posté : 02 févr. 2012, 22:41
par Ryle
Ben si tu fais
UPDATE table2 SET nom = ( SELECT CONCAT('nom', 'prenom', 'id')  FROM table1 WHERE table2 .id = table1.id)
MySQL concatène la chaine 'nom' avec la chaine 'prenom' et la chaine 'id', ce qui donne la chaine 'nomprenomid' qui est alors enregistrée dans ta colonne nom.

Si tu enlèves les apostrophes autours des noms de colonnes, MySQL utilisera les valeurs qu'il trouve dans la table ;)