Précédent   Forum des professionnels en informatique > Bases de données > Langage SQL
Langage SQL Forum d'entraide sur le langage SQL et sur les questions liées à la conception de schéma (DDL). Cours SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 18/11/2010, 04h03   #1
Invité de passage
 
khaltik anass
Inscription : février 2010
Messages : 6
Détails du profil
Informations personnelles :
Nom : khaltik anass

Informations forums :
Inscription : février 2010
Messages : 6
Points : 1
Points : 1
Par défaut aide sur une Question (..de spécialité différente)

bonjour ! il me reste une question question dans un exercice alors j'ai besoin de votre aide a la résoudre j'ai déjà essayer avec plusieurs manière sans arriver a une solution correcte
Voila Les Tables :
Médecin ( Idmedecin,nom,prénom,Ddn,Sexe,#Idspecialite)
Spécialité(Idspecialite,libelle)
Patient(Idpatient,nom,prénom,Ddn,sexe,adresse)
soigne(Idsoin,#Idmedecin,#Idpatient,nommaladie,comme,taire,date_soigne)
Question

écrire une procédure stocké qui permet :
-d'afficher le nom , le prénom et le numéro des patients ayant été suivi par au moins deux médecins de spécialité différente

Code :
SELECT Idpatient,Nom,Prenom  FROM Patient  WHERE Idpatient IN ( SELECT Idpatient  FROM Soigne  GROUP BY Idpatient HAVING COUNT(Idmedecin)>=2)
alors c'est la ou j'ai besoin d'aide ou plutôt d'idées "...de spécialité différente"
je sais que ce n'est pas une procédure mais ce qui m'intéresse c'est instructions de cette dernier
samgan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/11/2010, 10h46   #2
Expert Confirmé
 
Avatar de Lyche
 
Homme
Développeur SQL
Inscription : janvier 2007
Messages : 1 957
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Développeur SQL

Informations forums :
Inscription : janvier 2007
Messages : 1 957
Points : 3 849
Points : 3 849
Envoyer un message via MSN à Lyche
il faut déjà découper la requête en 2 étapes.
1 - il te faut rechercher tous les patients ayant eu 2 médecins de 2 spécialitées différentes. Ta sous requête n'est pas complète puisque tu affiches les informations pour 2 médecins sans tenir compte de leur spécialité.

2 - Une fois que tu as extraits tes patients, il te faut faire une jointure, ou procédé à une sous requête telle que tu l'as faite avec comme critère d'égalité l'identifiant ressorti de ta sous requête.

Je ne te ferais pas la requête, je te laisse réfléchir à ta sous requête, car tout ton problème viens de là. Une fois que celle-ci sera faite, le reste ira tout seul.

Cordialement,
Si tu as des questions n'hésite pas les poster.
__________________
Citation:
le programmeur est une machine bizarre qui transforme le café en code et le code en spaghetti
http://lyche.minitroopers.fr Rejoignez nous !
Lyche est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/11/2010, 11h50   #3
Rédacteur/Modérateur

 
Avatar de SQLpro
 
Homme Frédéric BROUARD
Expert SGBDR & SQL
Inscription : mai 2002
Messages : 10 930
Détails du profil
Informations personnelles :
Nom : Homme Frédéric BROUARD
Localisation : France

Informations professionnelles :
Activité : Expert SGBDR & SQL
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 10 930
Points : 17 724
Points : 17 724
Deux façons de faire :
1) par jointures avec une double jointure medecin/spécialité avec medcin1.id <> medecin2.id
2) par opération ensembliste UNION puis synthese.

A +
__________________
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro
http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation
* * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * *
SQLpro est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/11/2010, 12h20   #4
Invité de passage
 
khaltik anass
Inscription : février 2010
Messages : 6
Détails du profil
Informations personnelles :
Nom : khaltik anass

Informations forums :
Inscription : février 2010
Messages : 6
Points : 1
Points : 1
Merci Pour Vos Réponses
Je vais essayer
j'ai ajouter DISTINCT a Having pour éviter les même médecin même su j'arrive pas a comparer la spécialité d'un médecin avec les autres sans le faire avec lui même
Code :
SELECT Idpatient,Nom,Prenom  FROM Patient  WHERE Idpatient IN ( SELECT Idpatient  FROM Soigne  GROUP BY Idpatient HAVING COUNT(DISTINCT Idmedecin)>=2)
"ne me donne pas du poisson, mais montre moi comment pêcher"
samgan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/11/2010, 12h59   #5
Expert Confirmé
 
Avatar de Lyche
 
Homme
Développeur SQL
Inscription : janvier 2007
Messages : 1 957
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Développeur SQL

Informations forums :
Inscription : janvier 2007
Messages : 1 957
Points : 3 849
Points : 3 849
Envoyer un message via MSN à Lyche
Mais ton ID médecin seule ne te permet pas de savoir si ces deux praticiens possèdent la même spécialité.
__________________
Citation:
le programmeur est une machine bizarre qui transforme le café en code et le code en spaghetti
http://lyche.minitroopers.fr Rejoignez nous !
Lyche est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/11/2010, 13h49   #6
Invité de passage
 
khaltik anass
Inscription : février 2010
Messages : 6
Détails du profil
Informations personnelles :
Nom : khaltik anass

Informations forums :
Inscription : février 2010
Messages : 6
Points : 1
Points : 1
oui ou je sais qu'il me manque une sous requête par ce que il s'affiche les patients ayant été suivi par au moins deux médecin alors il me reste la condition de spécialité différente je vais essayer de le résoudre
samgan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/11/2010, 13h57   #7
Modérateur
 
Homme Fabien
Ingénieur d'études en décisionnel
Inscription : septembre 2008
Messages : 5 680
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 34
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études en décisionnel
Secteur : Arts - Culture

Informations forums :
Inscription : septembre 2008
Messages : 5 680
Points : 10 473
Points : 10 473
Envoyer un message via ICQ à Waldar Envoyer un message via Skype™ à Waldar
Il suffit de rajouter une jointure dans votre sous-requête :
Code :
1
2
3
4
5
6
7
8
9
SELECT Idpatient, Nom, Prenom
  FROM Patient
 WHERE Idpatient IN (  SELECT so.Idpatient
                         FROM Soigne so
                              INNER JOIN Medecin me
                                ON me.Idmedecin = so.Idmedecin
                     GROUP BY so.Idpatient
                       HAVING count(DISTINCT me.Idmedecin)    > 1
                          AND count(DISTINCT me.Idspecialite) > 1);
__________________
Email : http://scr.im/waldar
Waldar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/11/2010, 14h35   #8
Invité de passage
 
khaltik anass
Inscription : février 2010
Messages : 6
Détails du profil
Informations personnelles :
Nom : khaltik anass

Informations forums :
Inscription : février 2010
Messages : 6
Points : 1
Points : 1
merci a vous tous
Code :
1
2
3
4
5
6
7
 SELECT Idpatient, Nom, Prenom
  FROM Patient
  WHERE Idpatient IN (SELECT Idpatient FROM Soigne,médecin  
                          WHERE médecin.idmedecin=Soigne.Idmedecin
                            GROUP BY Soigne.Idpatient
     HAVING count(DISTINCT Soigne.Idmedecin)> 1
     AND count(DISTINCT médecin .idspécialite) > 1)
samgan est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 07h31.


 
 
 
 
Partenaires

Hébergement Web