Forum Clubic

Probleme sql

Bonjour,
j’ai un problème avec ma base de données, je m’explique :
J’ai deux tables construites comme ceci :
table 1 (idtable,NumSysteme,User,Profile)
table 2(idtable,NumSystem,Prof,subprof)

le champ profile de la table 1 correspond aux profiles des utilisateurs mais il existe des profiles composé qui sont des profiles rassemblant plusieurs sous profil. Ces sous profils correspondent aux champs subprof de la table 2.

J’aimerai remplacé les données du champs profile de la table 1, si le profile se trouve dans la table 2. En gros ça donnerait : si table1.Profile = table2.prof alors je remplace le profile par subprof.
Cependant, un prof de la table 2 peut avoir plusieurs subprof et donc je vais devoir remplacer plusieurs fois profile de la table 1 par un subprof (en gardant la meme ligne mais en changeant seulement le subprof).

Pour faire tout ça, j’ai pensé à la fonction MERGE sql mais je n’arrive pas à l’utiliser, donc si quelqu’un pouvait m’aider à le faire ou meme me proposer une autre solution ce serait sympa…

Merci d’avance.

Salut si j’ai bien compris

 UPDATE table1, table2 SET table1.profile = table2.subprof  WHERE table1.profile = table2.prof 

ou 

 UPDATE table1 LEFT JOIN table2 ON table1.profile = table2.prof  SET table1.profile = table2.subprof 

La premiere syntaxe correspond a mysql, et la seconde permet de faire la jointure ailleurs que dans le WHERE sauf que je ne sais pas si le LEFT JOIN est autorise’ sur un UPDATE. Voila j’espere t’avoir aide’, a+

deja merci de me repondre.
J’ai deja essayé ça et le probleme c’est que ça me fait l’update mais que pour un element alors que j’aimerai le faire pour plusieurs en gros, un profile de table 1 correspond à plusieurs subprof donc je dois mettre dans ma table tous les subprof correspondant au profile et donc créer des lignes en plus

Si les champs numSys correspond a la meme chose dans les 2 tables, pour creer les lignes tu peux faire


INSERT INTO table1(idtable,NumSysteme,User,Profile) (SELECT * FROM table2 LEFT JOIN table1 ON table1.profile = table2.prof)

Le probleme que je rencontre c’est pour le User, tu voudrais que ce soit le meme? Donc avoir des lignes avec NumSysteme et User identiques mais avec Profile qui change?
Si oui,

 
// je suppose que idtable est un id auto --

INSERT INTO table1(NumSysteme,User,Profile) (SELECT T1.NumSysteme, T1.User, T2.subprof  FROM table2 T2 LEFT JOIN table1 T1 ON T1.profile = T2.prof   WHERE  (T2.subprof  <> T1.profile ))

//Theoriquement le WHERE devrait empecher de creer des doublons.

J’espere que ca reponds a ton probleme :slight_smile:

A+

ca marche impecc merci beaucoup!