mysql update... select ?

Eléphant du PHP | 223 Messages

09 juil. 2007, 11:50

Bonjour, voici mon problème:
J'ai dans la même base 2 tables ayant la même structure (mêmes nombre et noms de champs). Pour faire simple, on va les appeler COMPLETE et INCOMPLETE.
Dans COMPLETE, j'ai des enregistrements complets (tous les champs remplis) et dans INCOMPLETE j'ai entre autres les enregistrements de INCOMPLETE mais auxquels il manque des valeurs.
Donc j'aimerai mettre à jour les enregistrements de INCOMPLETE qui sont compris dans COMPLETE.

Etant donné qu'il y a plus de 100 champs, je n'ai pas trop envie de faire un UPDATE ... SET COMPLETE.champ1=INCOMPLETE.champ1 avec les 100 champs différents...

Une autre possibilité serait de supprimer dans INCOMPLETE les champs correspondants et de les reinsérer avec un INSERT SELECT.

Je crois que je vais opter pour la 2eme solution, mais existe-t-il un moyen de faire une sorte de UPDATE ... SELECT pour modifier tous les champs sans avoir besoin de les lister..

Merci à tous
Bonne journée

Administrateur PHPfrance
Administrateur PHPfrance | 3088 Messages

09 juil. 2007, 13:15

Il n'y a pas de requête UPDATE qui fait ça, mais tu peux obtenir un résultat similaire à ton DELETE + INSERT ... SELECT grâce à la commande REPLACE INTO:

Code : Tout sélectionner

REPLACE INTO t1 SELECT * FROM t2
Ça correspond à un INSERT ... SELECT qui ferait un DELETE pour chaque enregistrement préexistant. À noter que REPLACE détecte les conflits grâce aux colonnes UNIQUE ou PRIMARY de la table de destination.

Eléphant du PHP | 223 Messages

09 juil. 2007, 13:39

Merci, je vais essayer ca...
Juste une confirmation : le test va s'effectuer entre les 2 clés primaires de mes 2 tables? ou entre tous les champs?

Administrateur PHPfrance
Administrateur PHPfrance | 3088 Messages

09 juil. 2007, 13:55

La structure de la table source ne rentre pas en ligne de compte. Pour être précis, on peut résumer le fonctionnement de REPLACE en disant que si l'insertion d'un enregistrement ne peut se faire à cause d'une colonne UNIQUE, l'enregistrement en conflit est effacé avant d'être remplacé.

Donc tout ce qui compte ce sont les colonnes UNIQUE de la table dans laquelle tu insères les données.

Eléphant du PHP | 223 Messages

09 juil. 2007, 14:16

ok, merci bien pour ton aide en tout cas...J'vais pouvoir m'en sortir comme un grand maintenant.
Bonne journée