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 :

Requête multi tables


Sujet :

Langage SQL

  1. #1
    Membre à l'essai
    Inscrit en
    Janvier 2010
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 24
    Points : 15
    Points
    15
    Par défaut Requête multi tables
    Bonjour à tous, je suis en développement ASP.NET/C# et je rencontre un problème SQL alors que je souhaite remplir un GridView avec un SELECT.

    Voilà les tables impliquées:


    ABSENCES
    ----------
    -num_absence
    -matricule
    -code_motif
    -date_debut
    -date_fin


    MOTIFS_ABSENCE
    -----------------
    -code_motif
    -motif


    SALARIES
    ---------
    -matricule
    -nom
    -prenom


    Je souhaite que mon tableau affiche les 20 dernières absences de salariés, comprenant:

    -le numéro d'absence
    -le nom et prénom du salarié correspondant au matricule qui est lui-même associé à ce numéro
    - le motif correspondant au code_motif associé à ce numéro
    - la date de déébut et de fin.

    Je n'arrive pas à tout faire correspondre et tout, voilà ce que j'ai essayé, qui ne marche pas... Faut-il utiliser les jointures?...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT TOP 60 ABSENCES.NUM_ABSENCE, SALARIES.NOM, SALARIES.PRENOM, MOTIFS_ABSENCE.MOTIF_ABSENCE
    FROM ABSENCES, SALARIES, MOTIFS_ABSENCE 
    WHERE ... 
    ORDER BY ABSENCES.NUM_ABSENCE;
    Merci d'avance, cordialement

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 108
    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 108
    Points : 28 420
    Points
    28 420
    Par défaut
    En utilisant des jointures normalisées (1992), la requête s'écrirait ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    SELECT  TOP 60 
            abs.num_absence
        ,   slr.nom
        ,   slr.prenom
        ,   mtf.motif_absence
    FROM    absences    AS  abs
        INNER JOIN
            salaries    AS  slr
            ON  abs.matricule   = slr.matricule
        INNER JOIN
            motifs_absence  AS  mtf
            ON  abs.code_motif  = mtf.code_motif 
    ORDER BY abs.num_absence
    ;
    Pour en savoir plus sur les jointures :
    Les jointures, ou comment interroger plusieurs tables
    par Frédéric Brouard

  3. #3
    Membre à l'essai
    Inscrit en
    Janvier 2010
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 24
    Points : 15
    Points
    15
    Par défaut
    Merci beaucoup, j'ai compris le principe, c'est bien pratique! Par contre j'ai une exception:

    "Erreur de syntaxe (opérateur absent) dans l'expression « abs.MATRICULE = slr.MATRICULE INNER JOIN Copie_dbo_MOTIFS_ABSENCE AS mtf ON abs.CODE_MOTIF = mtf.CODE_MOTI »."

    Après recherche sur google, l'erreur vient souvent du fait qu'il manque une simple quote, mais je vois pas où je devrais en mettre dans ma requête, j'ai quand même essayé dans les jointures, mais d'autres erreures apparaissaient...

    J'ai modifié la requête et testé, quand je met une seule de n'importe laquelle des deux INNER JOIN, ça marche impec... J'ai regardé la syntaxe quand on met 2 jointures INNER JOIN, la requête est pourtant bonne...même en mettant entre parenthèses les blocs ON(...).
    Une idée?

    Merci d'avance pour l'aide.

  4. #4
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 108
    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 108
    Points : 28 420
    Points
    28 420
    Par défaut
    Tu n'as pas précisé quel SGBD tu utilisais.
    Dans le cas d'Access, par exemple, il faut ajouter des parenthèses autour des jointures lorsqu'il y en a plus d'une.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    FROM    (   absences    AS  abs
            INNER JOIN
                salaries    AS  slr
                ON  abs.matricule   = slr.matricule
            )
        INNER JOIN
            motifs_absence  AS  mtf
            ON  abs.code_motif  = mtf.code_motif

  5. #5
    Membre à l'essai
    Inscrit en
    Janvier 2010
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 24
    Points : 15
    Points
    15
    Par défaut
    alelujiah! Merci beaucoup, j'ai essayé partout les parenthèses, voyant que c'était la source du problème, mais n'aurais jamais pensé à les mettre juste après le FROM... Je le saurais pour la prochaine fois sous ACCESS (oui j'avais pas précisé le détail^^).

    Merci encore, cordialement!

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

Discussions similaires

  1. Requête multi-tables :S
    Par plutonium719 dans le forum Développement
    Réponses: 4
    Dernier message: 12/03/2008, 16h41
  2. modifier des données dans une requête multi table
    Par Bluman dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 05/02/2008, 10h00
  3. PB requête multi-tables
    Par duchnok dans le forum Langage SQL
    Réponses: 1
    Dernier message: 04/01/2008, 12h25
  4. Requête multi-tables avec BDE
    Par Ptit_bouchon dans le forum Bases de données
    Réponses: 9
    Dernier message: 03/01/2008, 12h58
  5. problème de requête multi-table
    Par dergips dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 23/07/2007, 18h21

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