Aidez-moi à monter ma requête SQL

Bonjour,

Ca parait tout simple, mais voilà, je n'y arrive pas. J'ai une table du style :

------------------
liste | inscrit
------------------
2 | 10
2 | 11
2 | 13
3 | 12
4 | 10

J'ai besoin en une seule requête (pas de requêtes imbriquées) de sélectionner la liste de mes "inscrits" appartenant à une liste donnée à condition qu'il n'existe qu'un seul "inscrit" dans la table.

Exemple Si je fais une requête avec une des listes suivantes :
- Pour la liste 2, mon résultat doit être : 11, 13
- Pour la liste 3, mon résultat est le 12
- Pour la liste 4, aucun résultat.

Une idée?

Merci!

7 réponses

  1. Bonjour,

    un truc du genre :
    select ce que tu souhaite afficher
    from table dont tu as besoin
    where jointure si besoin (si plusieurs tables)
    and id_liste = numéro de la liste souhaité
    HAVING count(*) = 1; 


    quelque chose comme ça devrait faire l'affaire je pense.
    0
    1. Merci, mais le problème là, c'est qu'il fait une selection sur une liste précise. Donc il ne regarde pas si l'id de l'inscrit existe aussi pour un autre id de liste.
      0
  2. Donc il ne regarde pas si l'id de l'inscrit existe aussi pour un autre id de liste.
    suis désolé mais j comprend pas vraiment, peux tu rexpliquer le problème avec des exemples??
    0
    1. En fait, mes exemples sont là dans mon premier message. Je ne sais pas quoi donner d'autre.

      Je vais expliquer différement :

      J'ai une gestion d'inscrits couplée à une gestion de listes.
      Chaque inscrit peut appartenir à une ou pluisieurs listes.

      ma table contenant ces infos contient l'id de la liste, et l'id de mon inscrit.
      Si mon inscrit appartient à 2 listes, alors j'ai 2 enregistrements :
      - liste:3 ->inscrit:8
      - liste:4 ->inscrit:8

      Si mon inscrit appartient à une liste, je n'ai qu'une ligne :
      - liste:3 -> inscrit:9

      Si mon inscrit n'appartient à aucune liste, je n'ai pas de ligne.

      Je dois maintenant extraire les inscrits de cette table qui appartiennent à une liste donnée et ayant qu'un seul enregistrement toutes listes confondues.

      J'espère avoir expliqué au mieux...
      0
  3. Donc si je comprend bien, tu veux afficher chaque liste ou se trouve qu'un seul inscrit??
    0
    1. En fait, non, je veux pas afficher chaque liste. Uniquement celle que je passe en paramètre (where id_liste=x).
      0
  4. Ok, dont tu veux afficher l'inscrit où les inscrits de la liste données, c'est ça?? (j'essaye de bien comprendre pour que ce soit plus clair pour ensuite pouvoir mieux te guider.)
    0
    1. Bonjour

      Tu veux afficher la liste de ceux qui ne sont inscrits que sur une seule liste n'est-ce pas?
      0
    2. @wadaMerci Wada, oui, c'est ça!! C'est tellement plus facile en le disant :-) et je reprécise :
      Je veux afficher la liste de ceux qui ne sont inscrits que sur une seule liste "qui sera passée en paramètre". (where id_liste=x).

      Voilà
      0
  5. Ok, je vois mieux.

    Ben personnellement, je vois comment la réaliser mais avec l'utilisation d'une sous requêtes (req. imbriqué).

    Car sans sous requêtes à mon avis cela va être difficile en effet.

    Juste par curiosité, pourquoi veux tu pas de requête imbriqué??
    0
    1. Plusieurs centaines de milliers de lignes...
      La différence est notable!
      0
      1. Je suis de l'avis de loicDu28, je ne vois pas comment éviter le select imbriqué.
        0