Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 6 sur 6
  1. #1
    Futur Membre du Club
    Inscrit en
    août 2002
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : août 2002
    Messages : 41
    Points : 15
    Points
    15

    Par défaut SQL: jointure en cascades

    Bonjour à tous,

    Je rencontre un problème de construction d'une requête SQL de type "select".

    J'ai besoin d'effectuer une jointure "en cascade" de 3 tables "BRA", "LOT" et "FAC". Voici le texte de ma requête :

    Code :
    select bra.bra_num, lot_period, fac.fac_ind from lot inner join fac on lot.lot_num = fac.lot_num inner join bra on fac.bra_num = bra.bra_num
    Tous les champs utilisés comme critère de jointure sont des "alphanumériques".

    Le framework intercepte une erreur avec le message suivant :
    Erreur de syntaxe (opérateur absent) dans l'expression 'lot.lot_num = fac.lot_num inner join bra on fac.bra_num = bra.bra_num'
    Par contre, si j'utilise, pour la deuxième jointure, la syntaxe du SQL1, ce qui donne :

    Code :
    select bra.bra_num, lot_period, fac.fac_ind from lot inner join fac on lot.lot_num = fac.lot_num, bra where fac.bra_num = bra.bra_num
    ...cela fonctionne parfaitement !

    Quelqu'un saurait-il me dire ce qui cloche ?

    Merci beaucoup de votre aide.

    Bernard

  2. #2
    Futur Membre du Club
    Inscrit en
    août 2002
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : août 2002
    Messages : 41
    Points : 15
    Points
    15

    Par défaut

    Bonjour,

    En fait, en cherchant un peu mieux sur ce forum, j'ai trouvé l'explication :

    En .Net - ce n'était pas nécessaire avant avec Delphi et les composants KadAO, ni dans le SQL "normal", à ce que je sache -, il faut des parenthèses. Cela donne :

    Code :
    select bra.bra_num, lot_period, fac.fac_ind from ((lot inner join fac on lot.lot_num = fac.lot_num) inner join bra on fac.bra_num = bra.bra_num)
    Quelqu'un saurait-il me dire où je peux trouver un tuto sur les spécificités de la syntaxe SQL de .Net ?

    Merci pour vos pistes...

    Cordialement

    Bernard

  3. #3
    Rédacteur/Modérateur



    Homme Profil pro Thomas Levesque
    Développeur .NET
    Inscrit en
    février 2004
    Messages
    19 168
    Détails du profil
    Informations personnelles :
    Nom : Homme Thomas Levesque
    Âge : 32
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : février 2004
    Messages : 19 168
    Points : 36 582
    Points
    36 582

    Par défaut

    Citation Envoyé par Bernard M Voir le message
    En .Net - ce n'était pas nécessaire avant avec Delphi et les composants KadAO, ni dans le SQL "normal", à ce que je sache -, il faut des parenthèses.
    Citation Envoyé par Bernard M Voir le message
    Quelqu'un saurait-il me dire où je peux trouver un tuto sur les spécificités de la syntaxe SQL de .Net ?
    Il n'y a pas de "syntaxe SQL de .NET"... la syntaxe à utiliser est toujours celle du SGBD spécifique sur lequel la requête est exécutée. Il y a peut-être des petites subtilités quand tu passes par certains providers comme ODBC par exemple, mais la différence vient d'ODBC, pas de .NET

    En tous cas la syntaxe que tu indiques avec des parenthèses me semble assez bizarre, je n'ai jamais vu un seul SGBD qui ait besoin de ces parenthèses (en tous cas ce n'est pas la syntaxe SQL standard)

  4. #4
    Futur Membre du Club
    Inscrit en
    août 2002
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : août 2002
    Messages : 41
    Points : 15
    Points
    15

    Par défaut

    Bonjour Tomlev,

    C'est presque par hasard que j'ai vu ta réponse, six mois après ! Je ne comprends pas ce qui s'est passé, ce n'est pas dans mes habitudes. Je te prie sincèrement de m'excuser pour ce "silence impoli".

    J'ai effectivement été surpris de la nécessité de ces parenthèses, mais je m'y suis fait !

    J'ai remarqué d'ailleurs d'autres petites différences dans la syntaxe par rapport au composant pour Delphi, toujours pour attaquer une base Access.

    Encore merci et mille excuses 64bits !

  5. #5
    Inactif
    Homme Profil pro François
    Chef de projet NTIC
    Inscrit en
    janvier 2007
    Messages
    6 608
    Détails du profil
    Informations personnelles :
    Nom : Homme François
    Âge : 53
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : janvier 2007
    Messages : 6 608
    Points : 12 108
    Points
    12 108

    Par défaut

    Citation Envoyé par Bernard M Voir le message
    J'ai remarqué d'ailleurs d'autres petites différences dans la syntaxe par rapport au composant pour Delphi, toujours pour attaquer une base Access.
    Il aurait peut être fallu commencer par nous préciser qu'il s'agissait d'une base Access dont en effet le Sql est assez éloigné des standards.

  6. #6
    Futur Membre du Club
    Inscrit en
    août 2002
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : août 2002
    Messages : 41
    Points : 15
    Points
    15

    Par défaut

    Bluedeep :

    Il s'agissait aussi d'une base Access dans le contexte du composant de Delphi, c'est pourquoi j'ai écris :

    toujours pour attaquer une base Access.
    Le coup des parenthèses dans le cas de jointures en cascades, par exemple, le composant de Delphi ne les exigeait pas ! C'était l'objet initial de la discussion.

    Cordialement

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •