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

Développement SQL Server Discussion :

Probleme de parenthese dans une requete


Sujet :

Développement SQL Server

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    201
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 201
    Points : 114
    Points
    114
    Par défaut Probleme de parenthese dans une requete
    Bonjour je travail sur SQL Server 2008

    Ma requete rencontre un probleme selon Microsoft sql server management edition. Une erreur de syntaxe vers le mot clé group sur ma derniere ligne


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Select table1.idpersonne from table1  
    inner join (SELECT ENFANTS_A.enfantid FROM (select idpersele as enfantid from table2
    INNER JOIN (select annee  from table3  where fushianet_peri = 1 and annee = 2010) AAAA  
    ON table2.annee = AAAA.annee where idpersele > 0 group by idpersele  
    UNION ALL
     select enfantid  from table4 
    INNER JOIN (select annee  from table3 
    where  annee =2010) AAAA  ON tinscalsh.annee = AAAA.annee where enfantid > 0
     group by enfantid ) ENFANTS_A GROUP BY ENFANTS_A.enfantid) ENFANTS group by table1.idpersonne
    Je pense que c'est une erreur de parenthese mal placé ou manquante mais je n'arrive pas a voir ou est l'erreur

    Merci d'avance

  2. #2
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Points : 12 371
    Points
    12 371
    Par défaut
    Bonjour,

    Indenter le code de votre requête vous aurait aidé à trouver la source de votre erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    SELECT		table1.idpersonne 
    FROM		table1 
    INNER JOIN	(
    			SELECT	ENFANTS_A.enfantid 
    			FROM	(
    							SELECT		idpersele AS enfantid 
    							FROM		table2
    							INNER JOIN	(
    										SELECT	annee  
    										FROM	table3  
    										WHERE	fushianet_peri = 1 
    										AND	annee = 2010
    									) AAAA  
    										ON table2.annee = AAAA.annee 
    							WHERE		idpersele > 0 
    							GROUP BY	idpersele  
    					UNION ALL
    						SELECT		enfantid  
    						FROM		table4 
    						INNER JOIN	(
    									SELECT	annee  
    									FROM	table3 
    									WHERE  annee = 2010
    								) AAAA
    									ON tinscalsh.annee = AAAA.annee 
    						WHERE		enfantid > 0
    						GROUP BY	enfantid 
    				) ENFANTS_A 
    			GROUP	BY ENFANTS_A.enfantid
    		) ENFANTS
    GROUP BY	table1.idpersonne
    Vous n'avez pas de prédicat de jointure pour la jointure entre table1 et la sous-requête définissant l'ensemble ENFANTS
    C'est probablement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ON table1.idpersonne = ENFANTS.idpersonne
    Un peu de (T-)SQL tout de même :

    La requête qui spécifie le UNION ALL peut s'écrire ainsi, puisque vous n'utilisez pas de fonction d’agrégat (COUNT(), SUM(), MIN(), MAX(), AVG(), ...)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    	SELECT		DISTINCT T2.idpersele AS enfantid
    	FROM		dbo.table2 AS T2
    	INNER JOIN	dbo.table3 AS T3
    				ON T3.annee = T2.annee
    	WHERE		T3.annee = 2010
    	AND		T2.idpersele > 0
    UNION ALL
    	SELECT		DISTINCT T4.enfantid
    	FROM		dbo.table4 AS T4
    	INNER JOIN	dbo.table3 AS T3
    				ON T3.annee = T4.annee
    	WHERE		T3.annee = 2010
    	AND		T4.enfantid > 0
    UNION ALL vous permet de prendre les enfantid provenant de chacun des deux ensembles, même s'il en existe des doublons.

    Ensuite vous écrivez :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT	ENFANTS_A.enfantid 
    FROM	(
    		-- requête UNION ALL
    	) ENFANTS_A 
    GROUP	BY ENFANTS_A.enfantid
    Et il n'y a toujours pas de fonction d’agrégat.
    C'est donc bien que vous ne vouliez pas de doublons.
    Dans ce cas il suffit d'enlever les DISTINCT (ou GROUP BY), et le ALL d'UNION.
    Le tri est effectué par UNION.
    Votre requête devient alors :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    SELECT		DISTINCT T1.idpersonne
    FROM		dbo.table1 AS T1
    INNER JOIN	(
    				SELECT		T2.idpersele AS enfantid
    				FROM		dbo.table2 AS T2
    				INNER JOIN	dbo.table3 AS T3
    							ON T3.annee = T2.annee
    				WHERE		T3.annee = 2010
    				AND		T2.idpersele > 0
    			UNION 	
    				SELECT		T4.enfantid
    				FROM		dbo.table4 AS T4
    				INNER JOIN	dbo.table3 AS T3
    							ON T3.annee = T4.annee
    				WHERE		T3.annee = 2010
    				AND		T4.enfantid > 0
    		) AS ENFANTS 
    			ON T1.idpersonne = ENFANTS.idpersonne
    N'oubliez jamais de qualifier le nom des tables que vous manipulez par le nom du schéma auquel elles appartiennent.
    Comme vous n'en avez pas mis, c'est le schéma pas défaut, qui est dbo.

    Vous pouvez aussi utiliser les alias de table pour alléger le texte de votre requête

    @++

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    201
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 201
    Points : 114
    Points
    114
    Par défaut
    J'ai trouvé merci beaucoup de votre aide

  4. #4
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Points : 12 371
    Points
    12 371
    Par défaut
    Ce n'était pas le prédicat de jointure manquant ?

    @++

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 12/01/2007, 11h39
  2. [Access] Probleme de count dans une requete sql
    Par castelligreg dans le forum Langage SQL
    Réponses: 6
    Dernier message: 14/04/2006, 16h20
  3. [MySQL] probleme de syntaxe dans une requete sql
    Par jeanfrancois dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 28/03/2006, 10h54
  4. [JDBC]problème de syntaxe dans une requête en java...
    Par chti_juanito dans le forum JDBC
    Réponses: 60
    Dernier message: 04/11/2005, 16h47
  5. Probleme de logique dans une requete
    Par linou dans le forum Langage SQL
    Réponses: 11
    Dernier message: 18/03/2005, 19h52

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