Précédent   Forum du club des développeurs et IT Pro > Dotnet > Accès aux données
Accès aux données Forum d'entraide sur les technologies d'accès aux données de Microsoft (ADO.NET, Linq, Entity Framework, etc.).
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 13/04/2012, 14h50   #1
Bernard M
Futur Membre du Club
 
Inscription : 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 :
Citation:
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
Bernard M est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/04/2012, 08h52   #2
Bernard M
Futur Membre du Club
 
Inscription : août 2002
Messages : 41
Détails du profil
Informations forums :
Inscription : août 2002
Messages : 41
Points : 15
Points : 15
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
Bernard M est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 16/04/2012, 10h01   #3
tomlev
Rédacteur/Modérateur


 
Avatar de tomlev
 
Homme Thomas Levesque
Développeur .NET
Inscription : février 2004
Messages : 17 770
Détails du profil
Informations personnelles :
Nom : Homme Thomas Levesque
Âge : 31
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 : 17 770
Points : 33 988
Points : 33 988
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)
__________________

Pas de questions techniques par MP ! Le forum est là pour ça...

Tutoriels : Les markup extensions en WPF - La sérialisation XML avec .NET (Aller plus loin) - Une visite guidée de WPF (traduction)
Projet : Dvp.NET, la librairie .NET open-source des membres de Developpez !
tomlev est actuellement connecté   Envoyer un message privé Réponse avec citation 10
Vieux 23/10/2012, 13h40   #4
Bernard M
Futur Membre du Club
 
Inscription : août 2002
Messages : 41
Détails du profil
Informations forums :
Inscription : août 2002
Messages : 41
Points : 15
Points : 15
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 !
Bernard M est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/10/2012, 13h51   #5
Bluedeep
Expert Confirmé Sénior
 
Homme François
Chef de projet NTIC
Inscription : janvier 2007
Messages : 6 544
Détails du profil
Informations personnelles :
Nom : Homme François
Âge : 51
Localisation : France

Informations professionnelles :
Activité : Chef de projet NTIC

Informations forums :
Inscription : janvier 2007
Messages : 6 544
Points : 13 893
Points : 13 893
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.
__________________

Je ne réponds pas aux questions techniques par MP ! Le forum est là pour ça...


Une réponse vous a aidé ? utiliser le bouton

"L’ennui dans ce monde, c’est que les idiots sont sûrs d’eux et les gens sensés pleins de doutes". B. Russel
Bluedeep est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/10/2012, 08h21   #6
Bernard M
Futur Membre du Club
 
Inscription : août 2002
Messages : 41
Détails du profil
Informations forums :
Inscription : août 2002
Messages : 41
Points : 15
Points : 15
Bluedeep :

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

Citation:
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
Bernard M est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 15h51.


 
 
 
 
Partenaires

Hébergement Web