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

MySQL Discussion :

sélectionner les données uniques


Sujet :

MySQL

  1. #1
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2014
    Messages : 8
    Par défaut sélectionner les données uniques
    Bonsoir, je voudrais une aide à propos de la requête de ces questions :
    1) Donner l'identifiant des portes ne pouvant être ouvertes que par un seul et unique badge. Vous donnerez aussi le numéro du badge correspondant ;
    2) Donner le nom des employés pouvant accéder à au moins les mêmes portes que l'employé de matricule "C001".

    Voici la base de données Nom : WIN_20150112_223442.JPG
Affichages : 101
Taille : 88,7 Ko

  2. #2
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 059
    Par défaut
    Bonjour,

    Proposez-nous des requêtes et on vous dira si c'est correct ou pas...
    Rédacteur / Modérateur SGBD et R
    Mes tutoriels et la FAQ MySQL

    ----------------------------------------------------
    Pensez aux balises code et au tag
    Une réponse vous a plu ? N'hésitez pas à y mettre un
    Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça

  3. #3
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2014
    Messages : 8
    Par défaut
    Je crois qu'il faut se pencher sur la clause HAVING, j'ai essayé cette requête pour la question 1 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    select badge.idb, auto.idp 
    from badge, auto 
    where auto.idp in (
        select auto.idp 
        from auto 
        having count(*)=1
    );
    Mais le résultat est vide, alors je crois que la requête n'est pas complète.

  4. #4
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2014
    Messages : 8
    Par défaut
    c'est résolu pour la question 1 il me manquait un group by la bonne requete est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    select badge.idb, auto.idp 
    from badge, auto 
    where badge.idb = auto.idb 
    and auto.idp in (
        select auto.idp 
        from auto 
        group by auto.idb 
        having count(*)=1
    );

  5. #5
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 059
    Par défaut
    Ça m'étonnerait beaucoup que ça fonctionne (sauf sous MySQL ) et surtout que ça renvoie un résultat correspondant à ce que vous recherchez...

    Première chose, prenez vite l'habitude d'écrire les jointures avec la syntaxe SQL2 : INNER JOIN... ON...Deuxième chose, le jeu de données que vous nous présentez est trop pauvre pour bien tester la requête. Il faudrait l'enrichir un peu de quelques portes et quelques badges, pour tester la justesse de vos requêtes.

    Enfin, vous pouvez faire cette requête sans agrégation (COUNT...).
    Je vous laisse chercher encore un peu
    Voici un lien vers des tutoriels qui peuvent vous aider : http://sqlpro.developpez.com/
    Rédacteur / Modérateur SGBD et R
    Mes tutoriels et la FAQ MySQL

    ----------------------------------------------------
    Pensez aux balises code et au tag
    Une réponse vous a plu ? N'hésitez pas à y mettre un
    Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça

  6. #6
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2014
    Messages : 8
    Par défaut
    Merci pour vos indications, oui effectivement je travaille sous MySQL. Pour la 1iere question, la requête marche mais je coince toujours sur la 2ème question. J'ai essayé cette requête et encore une fois le résultat est vide :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    select badge.nom 
    from badge, auto 
    where badge.idb=auto.idb 
    and auto.idp in (
        select count(auto.idp) 
        from auto, badge 
        where auto.idb=badge.idb 
        and badge.matricule="POO1" 
        group by(auto.idp)
    );

  7. #7
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 059
    Par défaut
    Si la requête pour la 1re question donne un résultat, et en plus le résultat que vous attendez, c'est un pur hasard !
    Essayez plutôt la requête suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT a.idp, a.idb
    FROM auto a
    WHERE NOT EXISTS (
    	SELECT 1
    	FROM auto a2
    	WHERE a2.idp = a.idp
    	AND a2.idb != a.idb
    );
    Rédacteur / Modérateur SGBD et R
    Mes tutoriels et la FAQ MySQL

    ----------------------------------------------------
    Pensez aux balises code et au tag
    Une réponse vous a plu ? N'hésitez pas à y mettre un
    Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça

Discussions similaires

  1. Sélectionner certaines données uniquement
    Par nrgyz dans le forum Requêtes
    Réponses: 3
    Dernier message: 03/06/2011, 21h31
  2. Réponses: 5
    Dernier message: 21/07/2010, 09h01
  3. Réponses: 16
    Dernier message: 14/06/2009, 22h12
  4. Réponses: 2
    Dernier message: 18/11/2008, 15h33
  5. Comment sélectionner les données non dupliquées
    Par Dnx dans le forum Langage SQL
    Réponses: 5
    Dernier message: 04/10/2005, 11h43

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