Précédent   Forum des professionnels en informatique > Bases de données > Langage SQL
Langage SQL Forum d'entraide sur le langage SQL et sur les questions liées à la conception de schéma (DDL). Cours SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 02/01/2011, 14h42   #1
Invité de passage
 
Michael
Inscription : janvier 2011
Messages : 2
Détails du profil
Informations personnelles :
Nom : Michael

Informations forums :
Inscription : janvier 2011
Messages : 2
Points : 0
Points : 0
Par défaut Requête d'union: problème de syntaxe ?

Bonjour,

Je ne comprends pas pourquoi cette requète me renvoi une erreur:
"Erreur de synthaxe dans l'opération Join"

Code :
1
2
3
4
5
6
7
8
9
SELECT SUM(pts) AS total
FROM
((SELECT ((MDT+MST)*débit) AS pts
FROM TblFlux AS F, TblGemsInfoBassins AS G
WHERE F.Bassin = G.Bassin AND F.bassin='Amazonas')
UNION ALL
(SELECT SUM((MDT+MST)*débit) AS pts
FROM TblFlux AS F, TblGemsInfoBassins AS G
WHERE F.Bassin = G.Bassin AND ocean IN('NAT','SAT')))
Qu'en dites vous ?

Merci d'avance
SmilM
smilm est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/01/2011, 15h09   #2
Rédacteur/Modérateur

 
Avatar de SQLpro
 
Homme Frédéric BROUARD
Expert SGBDR & SQL
Inscription : mai 2002
Messages : 10 950
Détails du profil
Informations personnelles :
Nom : Homme Frédéric BROUARD
Localisation : France

Informations professionnelles :
Activité : Expert SGBDR & SQL
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 10 950
Points : 17 766
Points : 17 766
Pourquoi autant de parenthèses ? Vous en avez acheté un stocke et il faut les écouler ?????
Ne savez vous pas utiliser l'opérateur de jointure ?
De plus si vous vaiez indenté votre requête vous auriez trouvé immédiatement votre erreur !

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
SELECT SUM(pts) AS total
FROM   (SELECT (MDT + MST) * débit) AS pts
        FROM   TblFlux AS F
               INNER JOIN TblGemsInfoBassins AS G
                     ON F.Bassin = G.Bassin 
        WHERE  F.bassin = 'Amazonas'
        UNION  ALL
        SELECT SUM((MDT + MST) * débit) AS pts
        FROM   TblFlux AS F
               INNER JOIN TblGemsInfoBassins AS G
                     ON F.Bassin = G.Bassin 
        WHERE  ocean IN ('NAT', 'SAT')
       ) AS T
A +
__________________
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro
http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation
* * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * *
SQLpro est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/01/2011, 16h06   #3
Invité de passage
 
Michael
Inscription : janvier 2011
Messages : 2
Détails du profil
Informations personnelles :
Nom : Michael

Informations forums :
Inscription : janvier 2011
Messages : 2
Points : 0
Points : 0
Merci pour votre aide.
Il est vrai que j'avais sûrement un peu trop de parenthèses.

Cependant, la requête que vous proposez me renvoie l'erreur suivante:
"Erreur de syntaxe dans la requête Union"

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
SELECT SUM(pts) AS total
FROM   (SELECT (MDT + MST) * débit) AS pts
        FROM   TblFlux AS F
               INNER JOIN TblGemsInfoBassins AS G
                     ON F.Bassin = G.Bassin 
        WHERE  F.bassin = 'Amazonas'
        UNION  ALL
        SELECT SUM((MDT + MST) * débit) AS pts
        FROM   TblFlux AS F
               INNER JOIN TblGemsInfoBassins AS G
                     ON F.Bassin = G.Bassin 
        WHERE  ocean IN ('NAT', 'SAT')
       ) AS T
Savez-vous d'où cela peut provenir ?

Merci pour tout,
SmilM
smilm est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/01/2011, 17h05   #4
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 10 980
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
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 : 10 980
Points : 18 224
Points : 18 224
Envoyer un message via MSN à CinePhil
Quel SGBD donne ce message ?
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« 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 Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/01/2011, 17h16   #5
Membre expérimenté
 
Inscription : octobre 2002
Messages : 654
Détails du profil
Informations forums :
Inscription : octobre 2002
Messages : 654
Points : 552
Points : 552
Bonjour,
SQL pro avait oublié la suppression d'une parenthèse ouvrante.
Dans ce genre de cas, message d'erreur qui ne semble pas justifié, il peut être bon de vérifier que les parenthèses ouvrantes sont bien fermées, à l'aide de n'importe quel bon éditeur (là je suis sous linux j'ai vérifié avec geany, sous windows j'aurais vérifié avec Notepad ++, mais il y en a des dizaines ou centaines d'autres qui mettent en rouge la parenthèse ouvrante, lorsqu'on est positionné sur la fermante, et inversement)

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
SELECT SUM(pts) AS total
FROM   (SELECT (MDT + MST) * débit AS pts
        FROM   TblFlux AS F
               INNER JOIN TblGemsInfoBassins AS G
                     ON F.Bassin = G.Bassin 
        WHERE  F.bassin = 'Amazonas'
        UNION  ALL
        SELECT SUM((MDT + MST) * débit) AS pts
        FROM   TblFlux AS F
               INNER JOIN TblGemsInfoBassins AS G
                     ON F.Bassin = G.Bassin 
        WHERE  ocean IN ('NAT', 'SAT')
       ) AS T
Attention aussi au nom de table avec Accent.
Cordialement
Soazig
soazig est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 02/01/2011, 18h16   #6
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 10 980
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
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 : 10 980
Points : 18 224
Points : 18 224
Envoyer un message via MSN à CinePhil
Bien vu Soizig !

Ce que je fais pour ne pas m'emmêler avec les parenthèses et autres accolades dans les codes SQL ou d'autres langages, c'est que j'indente systématiquement en mettant la première parenthèse à la ligne suivante.

J'aurais ainsi écrit cette requête de la façon suivante :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
SELECT SUM(pts) AS total
FROM
(
  SELECT (MDT + MST) * débit AS pts
  FROM TblFlux AS F
  INNER JOIN TblGemsInfoBassins AS G ON F.Bassin = G.Bassin 
  WHERE F.bassin = 'Amazonas'
 
  UNION  ALL
 
  SELECT SUM((MDT + MST) * débit) AS pts
  FROM TblFlux AS F
  INNER JOIN TblGemsInfoBassins AS G ON F.Bassin = G.Bassin 
  WHERE  ocean IN ('NAT', 'SAT')
) AS T
Ça me semble beaucoup plus lisible comme ça !
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« 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 Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 10
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 14h42.


 
 
 
 
Partenaires

Hébergement Web