IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage SQL Discussion :

requete avec select unique


Sujet :

Langage SQL

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    187
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations forums :
    Inscription : Octobre 2008
    Messages : 187
    Points : 62
    Points
    62
    Par défaut requete avec select unique
    Salut !

    J'ai une table Validation:
    Id_étudiant--- --id_semestre -----id_validation
    102-------------1----------------4
    102-------------1----------------3-
    102-------------2----------------4
    103-------------1----------------4
    104-------------2----------------3
    104-------------2----------------4

    je veux sélectionner les étudiants qui ont pour le semestre2 id_alidation=4 uniquement dans l'exemple en haut je veux avoir:
    l'étudiant 102 et non pas 102 et 104
    merci.

  2. #2
    Membre expérimenté
    Avatar de jbrasselet
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Mars 2006
    Messages
    1 022
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 022
    Points : 1 413
    Points
    1 413
    Par défaut
    Ton étudiant 104 correspond pourtant à tes critères de recherche, non?

    Sinon tu peux essayer avec un TOP 1 ou LIMIT 1 suivant le SGBD utilisé

  3. #3
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 102
    Points : 28 384
    Points
    28 384
    Par défaut
    Pourtant les étudiants 102 et 104 répondent à la règle que tu donnes
    les étudiants qui ont pour le semestre2 id_alidation=4
    Alors pourquoi uniquement le 102 et pas le 104 ?

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    861
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 861
    Points : 965
    Points
    965
    Par défaut
    Parce que ça n'est pas très bien expliqué, mais du fait que l'etudiant 104 a également un id_validation = 3 pour le semestre 2, il ne doit pas apparaitre :
    Citation Envoyé par badi3a82 Voir le message
    je veux sélectionner les étudiants qui ont pour le semestre2 id_alidation=4 uniquement
    Pour donner une piste, vous pouvez utiliser un NOT EXISTS ou un NOT IN.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    187
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations forums :
    Inscription : Octobre 2008
    Messages : 187
    Points : 62
    Points
    62
    Par défaut
    voilà ça marche avec NOT exist :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT     id_étudiant
    FROM        validation AS h1
    WHERE     (id_semestre = 2) AND (id_validation = 4) AND (NOT EXISTS
                              (SELECT     id_étudiant
                                FROM          validation AS h2
                                WHERE      (id_semestre = 2) AND (id_validation <> 4) AND (h1.id_étudiant = id_étudiant)))
    mais top1 et limit1 je sais pas comment les utiliser je travail avec sqlserver2005.
    merci

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    861
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 861
    Points : 965
    Points
    965
    Par défaut
    TOP et LIMIT sont utilisés pour limiter le nombre de lignes que renvoie une requête. Ca ne vous sera pas utile dans votre cas.

  7. #7
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 453
    Points : 18 388
    Points
    18 388
    Par défaut
    Je vous donne une autre méthode qui ne fait qu'un seul scan de votre table :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
      select id_etudiant
        from Validation
       where id_semestre = 2
    group by id_etudiant
      having count(*) = 1
         and max(id_validation) = 4
    L'idée c'est parmis le second semestre (le where), ne récupérer les étudiants qui n'ont qu'une seule validation (le count(*) = 1) et dont celle-ci vaut 4 (le max, ça aurait pu être un min, sum, avg, peu importe pour ce besoin précis).

  8. #8
    Membre expérimenté
    Avatar de jbrasselet
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Mars 2006
    Messages
    1 022
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 022
    Points : 1 413
    Points
    1 413
    Par défaut
    Citation Envoyé par Snipah Voir le message
    TOP et LIMIT sont utilisés pour limiter le nombre de lignes que renvoie une requête. Ca ne vous sera pas utile dans votre cas.
    Oui en effet mais c'est parce que je n'avais pas compris sa demande correctement

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    187
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations forums :
    Inscription : Octobre 2008
    Messages : 187
    Points : 62
    Points
    62
    Par défaut
    Merci jbrasselet,Waldar,Snipah,al1_24

    ça marche ta solution waldar,mais j'ai un problème si j'ajoute d'autre critères :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT     historique.id_etudiant, historique.id_semestre, 
                          historique.id_validation, 
    validation.id_semestre AS Expr1, 
                          validation.id_validation AS Expr2
    FROM         historique INNER JOIN
                          historique ON historique.id_etudiant = historique.id_etudiant
    WHERE     (historique.id_semestre = 2) AND
     (historique.id_validation = 1) AND 
    
         (validation.id_semestre = 2) AND (validation.id_validation = 4)
    je veux modifier la ligne en gras par la solution de waldar . Je l'ai fait par with r1 as....
    je ne sais pas s'il ya une autre façon .
    Merci!
    merci

  10. #10
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 453
    Points : 18 388
    Points
    18 388
    Par défaut
    Si vous ajoutez d'autres critères, ce n'est plus le même besoin.
    Si ce n'est plus le même besoin, ce n'est plus forcément la même architecture de requête.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Optimisation requete avec select Imbriqué
    Par sintesi974 dans le forum Requêtes
    Réponses: 6
    Dernier message: 04/08/2010, 17h18
  2. Problème requete avec SELECT imbriqué
    Par Isiker dans le forum Langage SQL
    Réponses: 2
    Dernier message: 27/07/2010, 16h44
  3. Requete avec selection de champs impossible
    Par Vifouz dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 05/06/2009, 11h42
  4. Requete avec critere unique
    Par aquafafa dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 03/04/2008, 13h59
  5. requete avec selection variable
    Par elharet dans le forum SQL
    Réponses: 8
    Dernier message: 31/03/2008, 17h32

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo