Requete SQL probleme

Fermé
benSQL - Modifié le 25 avril 2019 à 18:10
jee pee Messages postés 39583 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 18 avril 2024 - 26 avril 2019 à 08:44
Bonjour ;

je dois effectuer une requete SQL : Afficher la liste des salarié (nom ; prenom; Nom du diplome ) qui ont un BAC et/ou un BTS (ne pas utiliser les codes diplomes D1 et D2 );

mes tables sont : salarie qui regroupe les noms prenoms des salarié , le matricule est egalement precisé ; les salarie ont tous 1 matricule ; une table avoir_diplome regroupe les champs matricule et code_diplome
et les code diplome D1 D2 D3 etc ; code diplome est dans une table Nomme Diplome qui regroupe code diplome , nom du diplome (et niveau ( pas utile ici )

jai donc fais ma requête : sous le format sql la voici :

SELECT SALARIE.NOM, SALARIE.PRENOM, DIPLOME.DIPLOME
FROM SALARIE INNER JOIN (DIPLOME INNER JOIN AVOIR_DIPLOME ON DIPLOME.CODE_DIPLOME = AVOIR_DIPLOME.CODE_DIPLOME) ON SALARIE.MATRICULE = AVOIR_DIPLOME.MATRICULE
WHERE (((DIPLOME.DIPLOME)="bac" Or (DIPLOME.DIPLOME)="bts"))
ORDER BY SALARIE.NOM;


cela fonctionne cepedant une salarie possede les deux , et apparait donc deux fois dans la reponse.

D'où ma question ensuite : je dois cree une autre requete : afficher la liste des salariés (nom,prenom qui ont un BAC ET un bTS ducoup elle rentre dans ce cadre cependant elle apparait deux fois ; quelqu 'un aurait t'il une solution ?

merci d'avances , Cordialement

2 réponses

jee pee Messages postés 39583 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 18 avril 2024 9 225
Modifié le 25 avril 2019 à 18:16
Bonjour,

Tu fais un select juste nom, prénom et en fin tu ajoutes un
group by 
nom, prénom.
having count(*) >1
.

0
jee pee Messages postés 39583 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 18 avril 2024 9 225
Modifié le 25 avril 2019 à 18:21
mais si le salarié a un bts couture et un bts mécanique, cela va donner une réponse fausse ;-)

il faudrait alors séparer bac et bts et faire un jointure pour le bac et une autre jointure pour le bts
0
d'accord je dois donc enlever diplome du select ? , je ne suis pas sure de comprendre comment utiliser cela ,
pas de complication de ce genre , le salarie a uniquement le bac et le bts
0
jee pee Messages postés 39583 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 18 avril 2024 9 225
Modifié le 25 avril 2019 à 19:00
SELECT SALARIE.NOM, SALARIE.PRENOM
FROM SALARIE INNER JOIN (DIPLOME INNER JOIN AVOIR_DIPLOME ON DIPLOME.CODE_DIPLOME = AVOIR_DIPLOME.CODE_DIPLOME) ON SALARIE.MATRICULE = AVOIR_DIPLOME.MATRICULE
WHERE (((DIPLOME.DIPLOME)="bac" Or (DIPLOME.DIPLOME)="bts"))
GROUP BY SALARIE.NOM, SALARIE.PRENOM HAVING COUNT(*) > 1;
0
benSQL > jee pee Messages postés 39583 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 18 avril 2024
25 avril 2019 à 19:21
Mille fois merci !
0
derniere question jai deux requête ou il met demander de proposer deux version différente pour arriver au meme resultat :

- listes des salariés (nom,prenom,nom du service, salaire) qui sont affectés au services informatique et expeditions. Le resultat sera trieé par service ( la requete ne devra pas mentionner les codes 'EXP' et INF des services
j'ai donc fait :

SELECT SALARIE.NOM, SALARIE.PRENOM, SERVICE.NOM_SERVICE, SALARIE.SALAIRE
FROM SERVICE INNER JOIN (EMPLOI INNER JOIN SALARIE ON EMPLOI.CODE = SALARIE.CODE_EMPLOI) ON SERVICE.CODE_SERV = SALARIE.CODE_SERVICE
WHERE (((SALARIE.CODE_SERVICE)='EXP' Or (SALARIE.CODE_SERVICE)='INF'))
ORDER BY SERVICE.NOM_SERVICE;


si jamais tu connais une alternative pour obtenir un resultat similaire

pareil pour celle ci : - liste des salariés (nom,prenom,nom du service , salaire ) qui sont affecter au services commercial et expeditions et qui percoit superieur a 2000 euros . le resultat sera trier par service , la requete ne devra pas mentionner le code 'EXP' et 'COM' des services

j'ai fais cela :

SELECT SALARIE.NOM, SALARIE.PRENOM, SERVICE.NOM_SERVICE, SALARIE.SALAIRE
FROM SERVICE INNER JOIN SALARIE ON SERVICE.CODE_SERV = SALARIE.CODE_SERVICE
WHERE (((SALARIE.CODE_SERVICE)='EXP' Or (SALARIE.CODE_SERVICE)='COM'))
ORDER BY SALARIE.CODE_SERVICE;



merci d'avance
0
effectivement il me semble que cela fonctionne ; avez vous une deuxieme methode pour celle ci ?

SELECT SALARIE.NOM, SALARIE.PRENOM, SERVICE.NOM_SERVICE, SALARIE.SALAIRE
FROM SERVICE INNER JOIN SALARIE ON SERVICE.CODE_SERV = SALARIE.CODE_SERVICE
WHERE (((SERVICE.NOM_SERVICE)='Expéditions' Or (SERVICE.NOM_SERVICE)='Commercial') AND ((SALARIE.SALAIRE)>2000));
0
jee pee Messages postés 39583 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 18 avril 2024 9 225
Modifié le 25 avril 2019 à 23:28
Facile moi qui ne pratique pas l'INNER JOIN ou l'OUTER JOIN

SELECT SALARIE.NOM, SALARIE.PRENOM, SERVICE.NOM_SERVICE, SALARIE.SALAIRE
FROM SALARIE, SERVICE 
WHERE SERVICE.CODE_SERV = SALARIE.CODE_SERVICE 
AND SERVICE.NOM_SERVICE IN ('Expéditions','Commercial')
AND SALARIE.SALAIRE > 2000;
0
parfait effectivement ; je vous remercie sincerement ;

et pour celle ci avez vous une alternative ?

SELECT SALARIE.NOM, SALARIE.PRENOM, SERVICE.NOM_SERVICE, SALARIE.SALAIRE
FROM SERVICE INNER JOIN (EMPLOI INNER JOIN SALARIE ON EMPLOI.CODE = SALARIE.CODE_EMPLOI) ON SERVICE.CODE_SERV = SALARIE.CODE_SERVICE
WHERE (((SERVICE.NOM_SERVICE)="Expéditions" Or (SERVICE.NOM_SERVICE)='Informatique'))
ORDER BY SERVICE.NOM_SERVICE;
0
jee pee Messages postés 39583 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 18 avril 2024 9 225 > benSQL
26 avril 2019 à 08:44
A toi de l'écrire, tout est dans mon dernier exemple ;-)
0