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 :

Question sur les jointures


Sujet :

Langage SQL

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2010
    Messages : 6
    Points : 6
    Points
    6
    Par défaut Question sur les jointures
    Re bonsoir,
    je cale encore sur une requête

    On me demande d'afficher "Les numéros de ligue des nageurs qui ont uniquement participé à la 1ère journée de la compétition n°2 en 2003

    ça se passe dans la table Résultats avec les champs (Nr Ligue, Nr Compétition, N° journée, Année)

    et on me demande de le faire avec une jointure.

    Bon j' ai employé une jointure interne mais je bloque sur le concept en fait

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT DISTINCT R1.Nrligue
    FROM Resultats R1
         INNER JOIN Resultats R2
         ON // ?    
    ORDER BY R1.Nrligue DESC;
    des idées ? Merci d'avance !

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 802
    Points
    30 802
    Par défaut
    Il faut reformuler la question :
    Les numéros de ligue des nageurs qui n'ont pas participé à une autre journée de compétition que la 1ère journée de la compétition n°2 en 2003.
    Et ça doit certainement se traduire par un NOT EXISTS ou un NOT IN
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  3. #3
    Membre émérite
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    1 874
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 874
    Points : 2 890
    Points
    2 890
    Par défaut
    Autre idée: s'il y a EXCEPT dans ton SGBD, une formulation possible est:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select ... FROM ... WHERE journee=1 and compet=2 and annee=2003
    EXCEPT
    select ... FROM ... WHERE journee<>1 OR compet<>2 OR annee<>2003
    Le résultat est littéralement ceux qui sont satisfont exactement les critères EXCEPTés ceux qui satisfont d'autres critères. Si des colonnes peuvent être nulles il faut ajouter OR colonne is null pour chacune d'elles dans la 2eme sous-requête.

  4. #4
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Quels sont les nageurs ayant participé à la 1ère journée de la compétition n°2 en 2003 ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT nrligue
    FROM resultats
    WHERE nrcompetition = 2
      AND nrjournee = 1
      AND annee = 2003
    Mais là on a aussi ceux qui ont participé en plus à d'autres journées de la même compétition.
    En faisant une jointure externe avec ceux-ci, et en les éliminant, on ne garde que ceux qui n'ont participé qu'à cette journée.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT r1.nrligue
    FROM resultats r1
    LEFT JOIN resultats r2 ON r2.nrligue = r1.nrligue
      AND r2.nrcompetition = r1.nrcompetition
      AND r2.annee = r1.annee
      AND r2.nrjounee <> r1.nrjournee
    WHERE r1.nrcompetition = 2
      AND r1.nrjournee = 1
      AND r1.annee = 2003
      AND r2.nrligue IS NULL
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

Discussions similaires

  1. Question sur les jointures
    Par Nikimizi dans le forum Langage SQL
    Réponses: 1
    Dernier message: 24/06/2013, 12h22
  2. Question sur les jointures en cas d'héritage
    Par Kropernic dans le forum Développement
    Réponses: 4
    Dernier message: 22/10/2012, 15h31
  3. Question sur les jointures
    Par dimitri13 dans le forum Requêtes
    Réponses: 2
    Dernier message: 14/04/2009, 11h28
  4. Question sur les jointures
    Par neufgirl dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 26/02/2009, 17h30
  5. Question sur les jointures
    Par richard038 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 02/06/2006, 11h46

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