replace into et 2 clés uniques

Bonjour,

J'ai une table 'clients' avec 2 clés 'unique': id_client (int autoincrement) et codecomptable_client (CHAR 6)
Lorsque je fais un import depuis une application tierce, j'ai une requête
Code :
Sélectionner tout - Visualiser dans une fenêtre à part
Code:
REPLACE INTO clients (codecomptable_client, ...

Le but est que si l'application tierce m'envoie un client avec le même code client, je fait un mise à jour et non un ajout.
Problème: la mise à jour modifie également le id_client. Or il ne le faut pas (c'est le lien avec plein d'autres tables).

Comment dois-je m'y prendre ?
 
En fait, je vais tenter avec
Code:
INSERT INTO ... ON DUPLICATE KEY UPDATE ...
Mais dans ce cas, je n'ai pas mis la clé id_client en 'unique' mais en 'index'. Seule l'autre clé codecomptable_client reste en 'unique'.

Qu'en pensez-vous ?
 
A mon avis, surement pas INSERT. Plutot UPDATE comme indiqué par tryan.
Mais qu'est ce que tu veux faire, réellement? Mettre à jour codecomptable_client?
 
surtout pas: je veux qu'il y ait insertion, sauf si codecomptable_client est déjà connu dans la base, alors on fait un update.
 
Dans ce cas là je ferais un if en php (je connais pas assez en sql) : if (select codecomptable_client from table = lecodecherché) UPDATE else INSERT
 
Salut bproductiv ;-)

Ta solution vient effectivement à l'esprît, mais demande 2 requêtes SQL. Sachant que l'import peut comporter des milliers de ligne, j'évite.
 
Oui c'est clair, tout dépend la bécane derrière, avec openedge (concurrent d'oracle) je le fais sans soucis avec des milliers de lignes et ca bronche pas :)
 
J'ai résolu mon affaire avec
Code:
INSERT INTO ... ON DUPLICATE KEY UPDATE...
J'ai donc une seul clé de type 'unique'. La clé id_client qui est auto_increment est en 'index'.
Merci à vous. Tshaw (comme dirait Edika) !
 

➡️ Offre MyRankingMetrics ⬅️

pré-audit SEO gratuit avec RM Tech (+ avis d'expert)
coaching offert aux clients (avec Olivier Duffez ou Fabien Faceries)

Voir les détails ici

coaching SEO
Discussions similaires
Haut