Requette Sql

Requette Sql - SQL/NoSQL - Programmation

Marsh Posté le 10-04-2002 à 18:46:09    

J'ai une petite requete à faire:
3 tables
SALARIE (SAL_ID, SAL_LIB)
SERVICE (SER_ID, SER_ID)
SERSAL (SESA_SAL, SESA_SER)
 
un salarie peut appartenir à 1 ou plusieurs services
 
Je connais le SAL_ID, et je veux lister ts les libéllés des services appartenant au salarié..
 
Merci

 

[jfdsdjhfuetppo]--Message édité par BreizhynGd--[/jfdsdjhfuetppo]

Reply

Marsh Posté le 10-04-2002 à 18:46:09   

Reply

Marsh Posté le 10-04-2002 à 18:54:01    

BreizhynGd a écrit a écrit :

J'ai une petite requete à faire:
3 tables
SALARIE (SAL_ID, SAL_LIB)
SERVICE (SER_ID, SER_ID)
SERSAL (SESA_SAL, SESA_SER)
 
un salarie peut appartenir à 1 ou plusieurs services
 
Je connais le SAL_ID, et je veux lister ts les libéllés des services appartenant au salarié..
 
Merci  
 
 




 
SELECT SAL_LIB FROM SALARIE WHERE SAL_ID = 'what u want' ;


---------------
Nothing can stop me, I'm never satisfied, I take what i want, refuse to be denied...
Reply

Marsh Posté le 10-04-2002 à 18:56:01    

je crois que tu n'as pas bien lu...  
je veux la listes des services, pas la liste des salariés!! (trop simple! :) )

 

[jfdsdjhfuetppo]--Message édité par BreizhynGd--[/jfdsdjhfuetppo]

Reply

Marsh Posté le 10-04-2002 à 18:57:09    

BreizhynGd a écrit a écrit :

je crois que tu n'as pas bien lu...  
je veux la listes des services, pas la liste des salariés!!  




 
dans SERVICE t'as une clé etrangere ,???

 

[jfdsdjhfuetppo]--Message édité par raph93--[/jfdsdjhfuetppo]


---------------
Nothing can stop me, I'm never satisfied, I take what i want, refuse to be denied...
Reply

Marsh Posté le 10-04-2002 à 18:57:58    

select ser_lib from service where ser_id in (select sesa_ser from sersal where sesa_sal="what u want" )

Reply

Marsh Posté le 10-04-2002 à 19:01:59    

raph93 a écrit a écrit :

 
 
dans SERVICE t'as une clé etrangere ,???  
 




 
non, pas dans service, vu que que plusiers salariés peuvent avoir le meme service
 
HappyHarry, je vais essayer cela... je tiens au courant

 

[jfdsdjhfuetppo]--Message édité par BreizhynGd--[/jfdsdjhfuetppo]


---------------
Sparf! - Http://sparf.free.fr - France
Reply

Marsh Posté le 10-04-2002 à 19:51:20    

j'espere juste uque la bdd n'est pas mysql, pask'il ne supporte pas les requetes imbriquées
si tu veux chercher les libelles des services d'apres le nom de l'employe, il faut ajouter un niveau d'imbrication supplémentaire

Reply

Marsh Posté le 10-04-2002 à 20:18:59    

non, c'est du VB. J'ai pas encore essayé (j'arrive chez moi :sarcastic: )... j'essaie...


---------------
Sparf! - Http://sparf.free.fr - France
Reply

Marsh Posté le 10-04-2002 à 20:19:33    

je parle pas du langage de prog, mais de la base de donnée que tu utilises, m'enfin ...

Reply

Marsh Posté le 10-04-2002 à 20:53:40    

oui, scuse...
Access
de toute façons, çà passe par l'obdc...
(j'ai oublié la base à l'école  :cry: j'essaie demain donc! )

 

[jfdsdjhfuetppo]--Message édité par BreizhynGd--[/jfdsdjhfuetppo]


---------------
Sparf! - Http://sparf.free.fr - France
Reply

Marsh Posté le 10-04-2002 à 20:53:40   

Reply

Marsh Posté le 11-04-2002 à 09:53:22    

Je supppose les points suivants exacts :
 - la table SERVICE est en fait définie comme SERVICE (SER_ID, SER_LIB)(et non SERVICE (SER_ID, SER_ID) comme indiqué initialement)
 - la table SERSAL (SESA_SAL, SESA_SER) est une table de relation entre SERVICE et SALARIE, où SESA_SAL référence SAL_ID de SALARIE et SESA_SER référence SER_ID de SERVICE.
 
Si ce n'est pas le cas tant pis, il fallait être plus précis  :na:  
 
Dans le cas où mes suppositions sont exactes, la requête suivante devrait répondre à ton besoin :
 
Select SAL_LIB, SER_LIB
 from SALARIE, SERVICE, SERSAL
 where SALARIE.SAL_ID = SERSAL.SAL_ID
 and SERVICE.SER_ID = SERSAL.SER_ID;

 
Cette requête te renvoie la liste de TOUS les salariés avec le(s) service(s) correspondant(s). Si tu veux connaître le renseignement pour un salarié donné (SAL_ID = XXX), la requête devient :  
 
Select SAL_LIB, SER_LIB
 from SALARIE, SERVICE, SERSAL
 where SALARIE.SAL_ID = SERSAL.SAL_ID
 and SERVICE.SER_ID = SERSAL.SER_ID
 and SAL_ID = XXX;

 
 
Pas besoin de requête imbriquée ou de IN  :sarcastic:, deux jointures suffisent.
Il vaut mieux d'ailleurs éviter les requêtes imbriquées ou les IN quand on peut, car ces éléments sont très gourmands en ressources (bon là évidemment ça ne se voit pas mais sur des tables avec quelques centaines de milliers de lignes, on voit la différence !)

 

[jfdsdjhfuetppo]--Message édité par irulan--[/jfdsdjhfuetppo]

Reply

Marsh Posté le 11-04-2002 à 10:18:53    

BreizhynGd a écrit a écrit :

J'ai une petite requete à faire:
3 tables
SALARIE (SAL_ID, SAL_LIB)
SERVICE (SER_ID, SER_ID)
SERSAL (SESA_SAL, SESA_SER)
 
un salarie peut appartenir à 1 ou plusieurs services
 
Je connais le SAL_ID, et je veux lister ts les libéllés des services appartenant au salarié..
 
Merci  
 
 




 
Ya UNE ERREUR DANS LA TABLE SERVICE !!!
 
OUUUUUU LA HONTE : 0 SUR 20 !   :gun:

Reply

Marsh Posté le 11-04-2002 à 17:16:05    

SALARIE (SAL_ID, SAL_LIB)  
SERVICE (SER_ID, SER_LIB)  
SERSAL (SESA_SAL, SESA_SER)  
 
j'ai essayé les requete avec les jointures, elles ne fonctionnaient pas. Je retente ce soir... en essayant les 2 méthodes...


---------------
Sparf! - Http://sparf.free.fr - France
Reply

Marsh Posté le 11-04-2002 à 18:54:24    

BreizhynGd a écrit a écrit :

SALARIE (SAL_ID, SAL_LIB)  
SERVICE (SER_ID, SER_LIB)  
SERSAL (SESA_SAL, SESA_SER)  
 
j'ai essayé les requete avec les jointures, elles ne fonctionnaient pas. Je retente ce soir... en essayant les 2 méthodes...  




 
marchait pas la mienne  :??:

Reply

Marsh Posté le 11-04-2002 à 20:33:13    

j'ai pas encore essayé... :( En fait, ma disquette comporte un secteur défectueux..  :cry:  :cry:  :cry:  
je tiens au courant lundi...


---------------
Sparf! - Http://sparf.free.fr - France
Reply

Marsh Posté le 11-04-2002 à 20:36:31    

la table SERSAL est une table d association entre SALARIE et SERVICE donc je ne vois pas le probleme
 
Select SER_LIB
FROM SERVICE, SERSAL
WHERE SER_ID = SESA_SER
AND SESA_SAL = "L id du salarie"
 
Si bien evidement SESA_SAL represente la cle primaire de la table SALARIE (ie l identifiant du salarie) et SESAR_SER represente la cle primaire de la table service (ie identifiant du service)
 
Youpla

Reply

Marsh Posté le 11-04-2002 à 20:37:14    

Youpla a écrit a écrit :

la table SERSAL est une table d association entre SALARIE et SERVICE donc je ne vois pas le probleme
 
Select SER_LIB
FROM SERVICE, SERSAL
WHERE SER_ID = SESA_SER
AND SESA_SAL = "L id du salarie";
 
Si bien evidement SESA_SAL represente la cle primaire de la table SALARIE (ie l identifiant du salarie) et SESAR_SER represente la cle primaire de la table service (ie identifiant du service)
 
Youpla  



Reply

Marsh Posté le 11-04-2002 à 22:55:17    

Oups je n'avais pas intégré que tu ne voulais que le nom des services, pour un SAL_ID donné.
 
Dans ce cas de figure, c'est la requête de Youpla qui est la plus pertinente.

Reply

Marsh Posté le 13-04-2002 à 19:59:24    

Happy Harry => çà marche, Youpla aussi...
Cependant, pour mieux vous expliquer le pb, c'ets juste mon recordset qui se faisait remplir 5 lignes plus bas :( J'avais fait comme Youpla au départ mais bon... çà m'apprendra à pas regarder partout...  
 
Merci à Tous


---------------
Sparf! - Http://sparf.free.fr - France
Reply

Sujets relatifs:

Leave a Replay

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