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

Requêtes MySQL Discussion :

Utilisation EXISTS dans une requête


Sujet :

Requêtes MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Août 2009
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 9
    Par défaut Utilisation EXISTS dans une requête
    Bonjour,
    J'ai un petit soucis avec une requête SQL. J'effectue une jointure de deux tables afin d'en sorti les Id des membres, le problème est que la condition posée sur la table jointe fait que ça me retourne les membres en doublons. Le meilleur moyen étant d'utiliser EXISTS afin d'éviter de se retrouver avec des doublons, j'ai essayé mais en vain . Votre aide me serait précieuse et je vous en remercie d'avance. Voici le bout de requête à transformer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT Id_membre
    FROM mutualise.mem_membre mm
    JOIN mutualise.mem_membre_interet cp ON cp.Ide_membre = mm.Id_membre AND (cp.Id_interet = 5 OR cp.Id_interet = 8 OR cp.Id_interet = 13
    OR cp.Id_interet = 16 OR cp.Id_interet = 18)
    WHERE mm.Confirmation = 1
    AND mm.Date_desinscription IS NULL
    AND Pub = 1
    AND npai = 0;
    AND (cp.Id_interet = 5 OR cp.Id_interet = 8 OR cp.Id_interet = 13 --> C'est ce morceau qui sort des doublons car UN membre peut avoir PLUSIEURS interet. L'utilisation d'un DISTINCT n'est pas envisageable, car il passe par une table temporaire et donc perd beaucoup de temps. L'idéal étant d'utiliser un EXISTS comme j'ai expliqué précédemment .
    Cordialement, David.

  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 065
    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 065
    Par défaut
    Bonjour,

    Quelle version de MySQL utilisez-vous ?

    ced
    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 du Club
    Profil pro
    Inscrit en
    Août 2009
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 9
    Par défaut
    Mysql 1.2.17

  4. #4
    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 065
    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 065
    Par défaut
    Citation Envoyé par david666 Voir le message
    Mysql 1.2.17
    Ca serait vraiment surprenant que ça soit cette version-là .
    Que renvoie la requête suivante dans MySQL :


    ced
    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

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Août 2009
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 9
    Par défaut
    5.0.27-log

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Août 2009
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 9
    Par défaut
    C'est bon j'ai trouvé la solution, je la mets ci-dessous sait on jamais des fois qu'il y ait des gens que ça intéresse. Alors, afin d'éliminer des doublons EXISTS s'avère effectivement être une bonne solution et dans l'exemple cité ici, il sera utilisé ainsi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    SELECT Id_membre
    FROM mutualise.mem_membre mm
    WHERE mm.Confirmation = 1
    AND EXISTS ( SELECT Ide_membre
                 FROM mutualise.mem_membre_interet mi
                 WHERE mi.Ide_membre = mm.Id_membre
                 AND ( Id_interet = 5 OR Id_interet = 8 OR Id_interet = 13 OR             
                         Id_interet = 16 OR Id_interet = 18 ))
    AND mm.Date_desinscription IS NULL
    AND mm.Pub = 1
    AND mm.npai = 0;
    ==> Effectue une jointure tout en éliminant les doublons. ( Pratique pour éviter les DISTINCT qui passent par des copy to tmp table et donc prennent bcp trop de temps à s'exécuter ....

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

Discussions similaires

  1. [AC-2013] Filtrer les enregistrements si la clé existe dans une requête
    Par yupyupxav dans le forum Requêtes et SQL.
    Réponses: 0
    Dernier message: 25/01/2015, 00h55
  2. [AC-2010] Est-il possible d'utiliser rechdom dans une requête
    Par tgodefroid dans le forum Requêtes et SQL.
    Réponses: 7
    Dernier message: 04/04/2013, 22h14
  3. utilisation de la fonction Partdate() dans une requête
    Par jm6570 dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 01/02/2010, 11h55
  4. [MySQL] Utiliser implode dans une requête
    Par tiesto95 dans le forum PHP & Base de données
    Réponses: 12
    Dernier message: 18/01/2009, 17h02
  5. Utilisation de MAX dans une requête SQL
    Par Evil onE dans le forum Langage SQL
    Réponses: 7
    Dernier message: 15/06/2004, 18h38

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