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 :

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'
(NB : Il est vrai que j'aurai pu ne sélectionner que ceux dont l'idservice est différent mais ça m'importe peu.)

Par la requête ci-dessus j'obtiens donc une liste.

Machinalement, je commence à écrire mon 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')
Sauf qu'évidemment ça ne marche pas car j'ai une liste et il me faut obtenir une valeur dans ce genre d'update !

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 ?