none
Requète sql sur plusieurs tables utilisant INNER JOIN ... ON, quelle syntaxe? RRS feed

  • Question

  • Bonjour

    Je galère sur une requète SQL qui ne fonctionne pas dans un programme .NET : je ne trouve pas mon erreur de syntaxe. Voici le message d'erreur délivré par VisualStudio Express 2008
    Erreur de syntaxe (opérateur absent) dans l'expression '(Eleves.id_Prof = Profs.id_Prof) INNER JOIN Niveaux ON (Eleves.id_Niveau = Niveaux.id_Niveau)'.
    Voici la requète :

    SELECT Eleves.Nom, Eleves.Prenom, Eleves.Ddn, Eleves.Sexe, Profs.Nom, Niveaux.Niveau 
    FROM Eleves 
    INNER JOIN Profs ON (Eleves.id_Prof = Profs.id_Prof) 
    INNER JOIN Niveaux ON (Eleves.id_Niveau = Niveaux.id_Niveau)
    

    Vous trouverez ici les détails concernant les tables et leurs relations.

    Merci de votre aide

    pascal


    Bonjour Cordialement Pascal http://www.scalpa.info
    lundi 27 décembre 2010 11:53

Réponses

  • Bonjour,

    Tester la requête suivante : (elle a été obtenue à partir du concepteur de requête Access 2007 en simulant vos tables)

    SELECT Eleves.Nom, Eleves.Prenom,Eleves.Ddn, Eleves.Sexe, Profs.Nom, Niveaux.Niveau 
    FROM Profs INNER JOIN (Niveaux INNER JOIN Eleves ON Niveaux.Id_Niveau = Eleves.Id_Niveau) ON Profs.Id_Prof = Eleves.Id_Prof; 


    En espérant avoir pu rendre service (MehdiH)
    Retrouvez moi sur Office Users

    • Marqué comme réponse scalpa lundi 27 décembre 2010 13:24
    lundi 27 décembre 2010 12:48
  • Excellent en effet pour le néophite en sql que je suis ! La requète qui va bien est devenue :

    strSql = "SELECT e.Nom AS Nom, e.Prenom, e.Ddn, e.Sexe, p.Nom As Professeur, n.Niveau FROM Profs p INNER JOIN( Niveaux n INNER JOIN Eleves e ON n.id_Niveau = e.id_Niveau) ON p.id_Prof = e.id_Prof"
    

    Merci encore

    pascal


    Bonjour Cordialement Pascal http://www.scalpa.info
    • Marqué comme réponse scalpa lundi 27 décembre 2010 14:30
    lundi 27 décembre 2010 14:29

Toutes les réponses

  • Bonjour,

    Tester la requête suivante : (elle a été obtenue à partir du concepteur de requête Access 2007 en simulant vos tables)

    SELECT Eleves.Nom, Eleves.Prenom,Eleves.Ddn, Eleves.Sexe, Profs.Nom, Niveaux.Niveau 
    FROM Profs INNER JOIN (Niveaux INNER JOIN Eleves ON Niveaux.Id_Niveau = Eleves.Id_Niveau) ON Profs.Id_Prof = Eleves.Id_Prof; 


    En espérant avoir pu rendre service (MehdiH)
    Retrouvez moi sur Office Users

    • Marqué comme réponse scalpa lundi 27 décembre 2010 13:24
    lundi 27 décembre 2010 12:48
  • Bonjour

    J'ai testé :

    strSql = "SELECT Eleves.Nom, Eleves.Prenom, Profs.Nom, Niveaux.Niveau FROM Profs INNER JOIN (Niveaux INNER JOIN Eleves ON Niveaux.id_Niveau = Eleves.id_Niveau) ON Profs.id_Prof = Eleves.id_Prof"
    
    C'est nickel !!! Puis j'ai écrit :
    SELECT e.Nom, e.Prenom, e.Ddn, e.Sexe, p.Nom, n.Niveau FROM Profs p INNER JOIN( Niveaux n INNER JOIN Eleves e ON n.id_Niveau = e.id_Niveau) ON p.id_Prof = e.id_Prof
    

    pour que cela soit plus lisible. Mais je n'ai pas compris l'imbrication des INNER et des parenthèses....

    Merci Mehdi

    Cordialement

    Pascal


    http://www.scalpa.info

    • Modifié scalpa lundi 27 décembre 2010 13:22 signature bizarre
    lundi 27 décembre 2010 13:21
  • Re bonjour Pascal,

    Je vous avoue que moi aussi et comme je l'ai mentionné j'ai obtenu ce résultat à partir du concepteur de requête et je n'ai pas eu le temps d'analyser le résultat ainsi obtenu.

    Si j'ai le temps et à moins que quelqu'un d'autre ne donne une explication je ferais une tentative d'ès que possible.

    Sur ce bonne fin de journée.
     


    En espérant avoir pu rendre service (MehdiH)
    Retrouvez moi sur Office Users
    lundi 27 décembre 2010 13:31
  • Je vais me pencher sur ce concepteur de requète que je ne connais pas....
    Bonjour Cordialement Pascal http://www.scalpa.info
    lundi 27 décembre 2010 13:34
  • Egalement appeler la Grille d'interrogation, vous le lancer à partir de la commande "Créer une requête en mode création" (V 2003 et antérieures)

    Pour les versions 2007 et 2010 allez sur l'onglet "Créer" puis sur le groupe "Autres" enfin sur le bouton "Requête en mode création"

    Un des points forts est que vous pouvez basculer vers un affichage SQL.
     


    En espérant avoir pu rendre service (MehdiH)
    Retrouvez moi sur Office Users
    lundi 27 décembre 2010 13:40
  • Excellent en effet pour le néophite en sql que je suis ! La requète qui va bien est devenue :

    strSql = "SELECT e.Nom AS Nom, e.Prenom, e.Ddn, e.Sexe, p.Nom As Professeur, n.Niveau FROM Profs p INNER JOIN( Niveaux n INNER JOIN Eleves e ON n.id_Niveau = e.id_Niveau) ON p.id_Prof = e.id_Prof"
    

    Merci encore

    pascal


    Bonjour Cordialement Pascal http://www.scalpa.info
    • Marqué comme réponse scalpa lundi 27 décembre 2010 14:30
    lundi 27 décembre 2010 14:29
  • C'est une des difficultés avec Access: le code que vous avez essayé en premier est du code SQL standard et va fonctionner sans aucun problème avec SQL-Server ou Oracle.  Cependant, dans le cas d'Access/JET, celui-ci utilise sa propre variante de SQL qui nous oblige à imbriquer avec des parenthèses les différentes vues intermédiaires.

    Vous aurez un problème similaire avec les updates utilisant des tables jointes: la majorité des examples de code SQL que vous trouverez sur internet ne fonctionneront pas et vous devrez utiliser la syntaxe particulière d'Access/JET à la place.

    Il y a bien d'autres différences; comme par example l'utilisation des mots-clef True et False; qui n'existent pas dans le language SQL standard mais qui sont reconnues par Access/JET.


    Sylvain Lafontaine, ing.
    MVP - Access
    Blog/web site: http://coding-paparazzi.sylvainlafontaine.com
    Independent consultant and remote programming for Access and SQL-Server (French)

    <scalpa> wrote in message news:92b455b8-dc00-4761-8db2-c0306b2f867f@communitybridge.codeplex.com...

    Excellent en effet pour le néophite en sql que je suis ! La requète qui va bien est devenue :


    strSql = "SELECT e.Nom AS Nom, e.Prenom, e.Ddn, e.Sexe, p.Nom As Professeur, n.Niveau FROM Profs p INNER JOIN( Niveaux n INNER JOIN Eleves e ON n.id_Niveau = e.id_Niveau) ON p.id_Prof = e.id_Prof"

    Merci encore
    pascal


    Bonjour Cordialement Pascal http://www.scalpa.info

    dimanche 2 janvier 2011 00:21
  • Pourquoi faire simple quand on peut faire compliqué.... J'ai bien galéré sur cette requète pour "peupler" mon Dataset.

    Maintenant je galère sur l'UPDATE également.... Impossible de trouver la syntaxe qui va bien!!!


    Bonjour Cordialement Pascal http://www.scalpa.info
    lundi 3 janvier 2011 17:20
  • Dans ce cas, la meilleur chose à faire serait de donner votre example de code qui ne fonctionne pas avec l'update afin que l'on puisse jeter un coup d'oeil dessus.


    Sylvain Lafontaine, ing.
    MVP - Access
    Blog/web site: http://coding-paparazzi.sylvainlafontaine.com
    Independent consultant and remote programming for Access and SQL-Server (French)

    <scalpa> wrote in message news:de77e9cf-8ddf-4190-8ef9-0b9917ceb3da@communitybridge.codeplex.com...

    Pourquoi faire simple quand on peut faire compliqué.... J'ai bien galéré sur cette requète pour "peupler" mon Dataset.

    Maintenant je galère sur l'UPDATE également.... Impossible de trouver la syntaxe qui va bien!!!


    Bonjour Cordialement Pascal http://www.scalpa.info

    lundi 3 janvier 2011 18:22