Partage
  • Partager sur Facebook
  • Partager sur Twitter

Requête avec association

Sujet résolu
    21 septembre 2011 à 11:39:47

    Bonjour,

    j'ai une DB qui comprend ces 3 tables : utilisateur, client, est_gere. est_gere contient les associations d'identifiants des deux autres tables. Je cherche à récupérer les clients qui sont gérés exactement par un utilisateur dont je connait l'id. J'ai essayé cette requête qui ne fonctionne pas :
    SELECT c.idClient, nomClient FROM client c left join est_gere e on c.idClient = e.idClient left join utilisateur u on u.idUtil = e.idUtil where not e.idUtil <> 1 and e.idUtil = 1
    

    Le souci c'est que ça me renvoie aussi les clients qui sont gérés par plusieurs utilisateurs, et je ne vois pas comment faire pour avoir que ceux qui sont gérés uniquement par l'utilisateur 1. J'ai pensé à utiliser un count(), mais je ne vois pas du tout où le mettre.
    Si vous pouviez m'éclairer, ce serait avec plaisir. Merci.
    • Partager sur Facebook
    • Partager sur Twitter
      21 septembre 2011 à 12:46:07

      where not e.idUtil <> 1 and e.idUtil = 1

      o_O heu pourquoi tu fais 2 fois la même condition en fait ???

      Et pourquoi des LEFT JOIN et pas des INNER JOIN ?
      • Partager sur Facebook
      • Partager sur Twitter
        21 septembre 2011 à 13:17:38

        J'ai pensé que le "not e.idUtil <> 1" m'aurait exclu les clients qui auraient des utilisateurs autres que le 1, mais en effet ça ne marche pas car c'est juste la condition inverse à "e.idUtil = 1", et c'est bien là mon problème.
        Concernant le left, c'est une question de préférence.
        • Partager sur Facebook
        • Partager sur Twitter
          21 septembre 2011 à 13:23:18

          Une question de préférence ?? Tu perds surtout en performance (et en plus ça rime !)

          SELECT c.idClient, nomClient 
          FROM client c 
          INNER JOIN est_gere e ON c.idClient = e.idClient 
          INNER JOIN utilisateur u ON on u.idUtil = e.idUtil 
          WHERE e.idUtil = 1
          AND NOT EXISTS (
              SELECT * 
              FROM est_gere e_
              INNER JOIN utilisateur u_
              WHERE c.idClient = e_.idClient AND e_.idUtil <> 1
          )
          



          Fait à l'arrache, donc je promets pas que ça marche du premier coup...
          • Partager sur Facebook
          • Partager sur Twitter
            21 septembre 2011 à 14:04:07

            Parfait, ça fonctionne, merci beaucoup :)
            • Partager sur Facebook
            • Partager sur Twitter

            Requête avec association

            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
            • Editeur
            • Markdown