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 :

Sous requête multiple syntaxe


Sujet :

Développement SQL Server

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Novembre 2016
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2016
    Messages : 13
    Points : 6
    Points
    6
    Par défaut Sous requête multiple syntaxe
    Bonjour,
    j'ai une requete en MS SQLServer qui effectue des sous-requêtes avec cette syntaxe :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    select T1.id_client , T2.code_critere  as HOIP
    from client T1
    inner join client_critere T2 on T1.id_client = T2.id_client where T2.code_critere ='VAL1'
    inner join client_critere T3 on T1.id_client = T3.id_client where T3.code_critere ='VAL2' 
    inner join client_critere T4 on T1.id_client = T4.id_client where T4.code_critere ='VAL3' 
    etc...
    Lorsque je fais la requête avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select T1.id_client , T2.code_critere  as HOIP
    from client T1
    inner join client_critere T2 on T1.id_client = T2.id_client where T2.code_critere ='VAL1'
    cela fonctionne très bien.

    Par contre s'il y a plusieurs sous-requêtes, ça ne fonctionne plus.
    Pourriez vous m'aidez, SVP , à construire une requête avec plusieurs sous-requêtes sous Postgres ?

    Merci

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 188
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 188
    Points : 12 744
    Points
    12 744
    Par défaut
    bonjour,
    Je ne vois pas de sous requêtes dans la requête que tu nous montres, mais uniquement des jointures (qui sont mal écrites d'ailleurs).

    Tu ne nous dis pas ce que tu entends par "ça ne fonctionne pas", mais en lisant ta requête je pense savoir.
    Elle devrais ressembler à ceci:
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    select T1.id_client , T2.code_critere as HOIP
    from client T1
    inner join client_critere T2 on T1.id_client = T2.id_client AND T2.code_critere ='VAL1'
    inner join client_critere T3 on T1.id_client = T3.id_client AND T3.code_critere ='VAL2'
    inner join client_critere T4 on T1.id_client = T4.id_client AND T4.code_critere ='VAL3'

    Et quelque chose me dit qu'il te faut des jointures externes...

    Tatayo

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Novembre 2016
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2016
    Messages : 13
    Points : 6
    Points
    6
    Par défaut
    Bonjour,
    Oui c'est bien plusieurs jointures.
    Lorsque j'execute la requete dans MS Sqlserver
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    select T1.id_client , T2.code_critere as HOIP, T3.code_critere as REFP
    from client T1
    inner join client_critere T2 on T1.id_client = T2.id_client AND T2.code_critere ='VAL1'
    inner join client_critere T3 on T1.id_client = T3.id_client AND T3.code_critere ='VAL2'
    inner join client_critere T4 on T1.id_client = T4.id_client AND T4.code_critere ='VAL3'

    Cela renvoie un résultat.
    Alors que sur PostGres cela ne renvoie pas de résultat mais une erreur

    Je ne sais pas comment formater la requete avec n jointure pour avoir le resultat attendu.
    C'est la que j'ai besoin d'aide.
    Merci

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Novembre 2016
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2016
    Messages : 13
    Points : 6
    Points
    6
    Par défaut
    Désolé pour l'erreur.....
    C'est bien en effet un AND et non un WHERE ....................

    Merci en tout cas car je ne l'avais pas vu......
    Super

  5. #5
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 188
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 188
    Points : 12 744
    Points
    12 744
    Par défaut
    Comme je le disais je pense qu'il faut passer par des jointures externes.
    Si tu n'as pas de ligne dans la table client_critere dont la colonne .code_critere vaut par exemple "VAL1", la requête ne renverra rien.

    Ensuite tu nous dis que la requête renvoie un message d'erreur.
    Si tu ne nous donnes pas le message en question, on ne pourra t'aider.

    Tatayo

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Novembre 2016
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2016
    Messages : 13
    Points : 6
    Points
    6
    Par défaut
    Oui , on peut remplacer le inner par un LEFT join mais dans mon cas ce ne seront que les lignes avec correspondance.
    je ne veux pas les lignes null
    Merci

  7. #7
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 814
    Points
    17 814
    Par défaut
    Ce que vous cherchez à faire s'appelle un PIVOT, il y a de nombreux exemple sur le forum.

    Edit : suppression du lien incorrect.

  8. #8
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 736
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 736
    Points : 52 447
    Points
    52 447
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par wupper78 Voir le message
    Bonjour,
    j'ai une requete en MS SQLServer qui effectue des sous-requêtes avec cette syntaxe :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    select T1.id_client , T2.code_critere  as HOIP
    from client T1
    inner join client_critere T2 on T1.id_client = T2.id_client where T2.code_critere ='VAL1'
    inner join client_critere T3 on T1.id_client = T3.id_client where T3.code_critere ='VAL2' 
    inner join client_critere T4 on T1.id_client = T4.id_client where T4.code_critere ='VAL3' 
    etc...
    ...
    Non, cela ne passe par en MS SQL Server !!!! Je ne ais pas ou vous avez pêcher cela !

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

Discussions similaires

  1. Syntaxe de sous-requête avec Dreamweaver
    Par WPH2009 dans le forum Requêtes
    Réponses: 8
    Dernier message: 01/04/2009, 19h55
  2. Erreur syntaxe SQL DELETE avec sous requête
    Par jeanbenoit1987 dans le forum Langage SQL
    Réponses: 6
    Dernier message: 07/12/2007, 13h14
  3. Insertion multiple + sous-requête
    Par Cyprien_ dans le forum Langage SQL
    Réponses: 2
    Dernier message: 13/10/2007, 18h14
  4. Agrégats et sous-requêtes "Erreur de syntaxe"
    Par Finidrigoler dans le forum Access
    Réponses: 3
    Dernier message: 08/12/2006, 18h39
  5. Insertion multiple à base de sous requête SELECT
    Par drinkmilk dans le forum Langage SQL
    Réponses: 8
    Dernier message: 14/04/2005, 17h34

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