Bonjour à toutes et à tous.
Je bloque sur une requête qui à la première lecture me semblait plutôt simple.
J'ai une table MATERIEL contenant les champs (idmat (clé primaire), idemploye (clé externe), idservice (clé externe), idlocalisation (clé externe)).
J'ai une autre table EMPLOYE contenant les champs (idemploye (clé primaire), idservice (clé externe)).
Un matériel appartient à un seul et unique employé et un employé peut avoir 0 ou plusieurs matériel.
Un matériel appartient à un service. Un employé appartient à un service. Ainsi un matériel peut appartenir à un service différent de son propriétaire.
Je souhaite mettre à jour les matériels pour lesquels le champ idservice est différent de l'idservice de l'employé à qui il appartient et cela pour une localisation donnée.
Donc j'ai commencé à faire ma requête pour obtenir les idservice souhaités :
(NB : Il est vrai que j'aurai pu ne sélectionner que ceux dont l'idservice est différent mais ça m'importe peu.)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 Select EMPLOYE.idservice from MATERIEL, EMPLOYE where MATERIEL.idemploye= EMPLOYE.idemploye and MATERIEL.idlocalisation ='3263'
Par la requête ci-dessus j'obtiens donc une liste.
Machinalement, je commence à écrire mon Update :
Sauf qu'évidemment ça ne marche pas car j'ai une liste et il me faut obtenir une valeur dans ce genre d'update !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 UPDATE MATERIEL Set MATERIEL.idservice=(Select EMPLOYE.idservice from MATERIEL, EMPLOYE where MATERIEL.idemploye= EMPLOYE.idemploye and MATERIEL.idlocalisation ='3263')
Et là je coince ... En php, je sais faire ma boucle sans problème mais du coup ce genre d'opération est-il possible en SQL ?
Partager