[MySQL] Mettre à jour une table à partir d'elle-même ou autre table

Mettre à jour une table à partir d'elle-même ou autre table [MySQL] - SQL/NoSQL - Programmation

Marsh Posté le 18-01-2003 à 13:11:54    

Bonjour
 
MySQL version 3.23.47
 
 
J'insère actuellement des données d'une table TO_CLUSTERS1 dans une table TV_PHYS.
 
Je ne sélectionne que certaines colonnes de la table TO_CLUSTERS1.
 
Pour tous les objets de TO_CLUSTERS1 absents de TV_PHYS, un simple insert dans TV_PHYS suffit.
 
 
Mais je veux mettre à jour les lignes dans TV_PHYS pour les objets existants (clé primaire : CD_NOM),  
avec comme condition que l'on ne met à jour un champ que s'il n'est pas encore renseigné.
 
update ne semble pas permettre de mettre à jour une ligne par rapport à une autre ligne de la même table :
(en se basant par exemple sur un CD_NOM source qui est la concaténation d'un "$" et du CD_NOM cible).
 
update ne permet pas une mise à jour depuis une autre table, semble t'il.
 
La commande replace veut mettre à jour tous les champs, mais je ne veux qu'une mise à jour des champs vides!!
 
 
Bref, je ne sais plus quoi faire!
 
Une idée?
 
 


---------------
Je me disais justement ce matin qu'il me manquait quelque chose pour descendre les poubelles!!!
Reply

Marsh Posté le 18-01-2003 à 13:11:54   

Reply

Marsh Posté le 22-01-2003 à 03:17:12    

Malheureusement sans les subselect de 4.1 ca risque d'être compliqué :/

Reply

Marsh Posté le 24-01-2003 à 13:56:43    

joce a écrit :

Malheureusement sans les subselect de 4.1 ca risque d'être compliqué :/


 
J'ai droit à des égards princiers ! Le grand gourou du forum en personne!  :jap:  
 
Sinon, j'ai trouvé comment faire, mais n'ai pas posté car j'en avais marre de me répondre à moi même ici! J'ai la mauvaise habitude de poser des "colles"!
 
Ce que j'ai fait :
 
Insert dans une table temporaire à partir de ma table à mettre à jour.
 
Dans l'insert j'ai utilisé des IFNULL ou des IF pour prendre la valeur de ma table source tampon ou de ma table cible valeur suivant que cette dernière a tel champ non NULL.
 
Puis j'ai fait un REPLACE INTO table cible select * from table source.
 
enfin j'ai fait un insert classique pour les lignes de la source  absentes de la table cible!
 
 
Galère quand on vient d'Oracle, mais maintenant ça marche:
 
 
Si ça intéresse quelqu'un je peux poster le fichier sql + structure tables!
 
 
 
 


---------------
Je me disais justement ce matin qu'il me manquait quelque chose pour descendre les poubelles!!!
Reply

Marsh Posté le 24-01-2003 à 14:23:00    

sinon fyi avec 4.1 t'as la syntax ON DUPLICATE KEY SET

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed