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 :

Aide pour une requête et left join


Sujet :

Langage SQL

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 13
    Points : 7
    Points
    7
    Par défaut Aide pour une requête et left join
    Bonjour tout le monde ,

    Alors voilà j'ai les deux tables suivantes:

    Joueurs(ID, nom, prenom .... )

    Personnage(ID_PERSO, Ag , force, #ID_JOUEUR)

    Donc un joueur peux avoir 0,n personnage
    Un personnage est à 1,1 joueur

    Je cherche une requête permettant de récupérer le nom et prenom des joueurs qui ont des personages avec une Ag = 20 et des perso avec Ag=10

    Ex:
    Joueurs(1,'Toto','tt')
    Joueurs(2,'Machin','chose')

    Personnage(1,20,5,1)
    Personnage(2,10,5,1)
    Personnage(3,20,5,2)

    La requête devrait donc me renvoyer 'Toto tt' qui correspond au joueur ayant un personnage avec 10 ag ainsi qu'un autre perso avec 20 ag.

    Moi j'ai essayé ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT ID , nom,prenom, AG 
    from joueurs , personnage 
    WHERE ID = ID_JOUEUR
    AND AG = 20 OR AG=10
    Le problème c'est que je récupère les deux joueurs. Si je remplace la clause OR par un AND ca me renvoi rien du tout . Quelqu'un a une solution à me proposer ?

    Merci beaucoup

  2. #2
    Membre averti
    Inscrit en
    Mars 2004
    Messages
    425
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 425
    Points : 358
    Points
    358
    Par défaut
    Salut Essaies ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT ID , nom,prenom, AG 
    from joueurs , personnage 
    WHERE ID = ID_JOUEUR 
    AND AG = 20 AND ID in 
    (Select ID_JOUEUR from personnage where ID_JOUEUR = 10)

  3. #3
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2005
    Messages
    1 673
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 673
    Points : 1 775
    Points
    1 775
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT NOM, PRENOM
    FROM JOUEURS
    INNER JOIN PERSONNAGE P1 ON (ID_JOUEUR = ID)
    WHERE P1.AG = 20
    AND EXISTS ( SELECT *
                 FROM PERSONNAGE P2
                 WHERE P1.ID_JOUEUR = P2.ID_JOUEUR
                 AND P2.ID_PERSO <> P1.ID_PERSO
                 AND P2.AG = 10 )

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 13
    Points : 7
    Points
    7
    Par défaut merci
    Bonjour,

    Merci beaucoup c'est exactement ce qu'il me fallais . C'est vrai que je ne pense jamais à cette méthode pourtant trsè utile !

    vraiment un grand remerciement !

  5. #5
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2005
    Messages
    1 673
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 673
    Points : 1 775
    Points
    1 775
    Par défaut
    Laquelle de nos 2 solutions est correcte ?

    Quoi qu'il en soit marque le sujet résolu.

  6. #6
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Points : 2 227
    Points
    2 227
    Par défaut
    Je préfère cette solution plus souple quand il y a plus de contraintes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT Nom, Prenom
    FROM Joueurs J INNER JOIN Personnage P ON (P.ID_Joueur = J.ID)
    WHERE P.AG IN (20, 10)
    GROUP BY J.ID, J.Nom, J.Prenom
    HAVING COUNT(DISTINCT P.AG) = 2
    Malheureusement certains moteurs n'acceptent pas COUNT(DISTINCT ...)

Discussions similaires

  1. Besoin d'aide pour une requête SQL
    Par Borami dans le forum Langage SQL
    Réponses: 1
    Dernier message: 07/11/2005, 10h33
  2. J'ai besoin de votre aide pour une requête
    Par ovdz dans le forum Langage SQL
    Réponses: 6
    Dernier message: 20/05/2005, 11h42
  3. Demande d'aide pour une requête
    Par arkzor dans le forum Requêtes
    Réponses: 3
    Dernier message: 28/12/2004, 02h40
  4. Besoin d'aide pour une Requête SQL ...
    Par Kokito dans le forum Requêtes
    Réponses: 2
    Dernier message: 07/07/2004, 11h56
  5. besoin d'aide pour une requête
    Par Damien69 dans le forum Langage SQL
    Réponses: 11
    Dernier message: 31/03/2004, 15h38

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